期末考試要用哦,不然誰會願意去踩這么多坑。 qaq
龍夢 Fedora28 中有 codeblocks 17.12,但是 Ctrl-v 粘貼會閃退,導致壓根不能用。Bing了一下發現這其實是 codeblocks 的一個已知 bug,而且看起來已經被修復。於是我冒着可能引入更多 bug 的風險,編譯安裝 20.03 。其實不光光是編譯,而且會生成 rpm 包,這樣未來重新安裝和卸載都十分方便。
我所碰到的,編譯中發生的奇奇怪怪的問題,則寫在了最后的“一個坑”中。
如果有需要軟件包的可以在這里下載
一些信息
CPU: Loongson-3A R4 (Loongson-3A4000) @ 4x 1.8GHz
OS: Fedora28 for loongson KDE 5.1
Kernel: mips64 Linux 5.4.38-1.fc28.lemote.mips64el
gcc: version 8.4.0 20200304 (Red Hat 8.4.0-0.21) (GCC)
打包工具和工具鏈
sudo dnf install rpm-build gcc gcc-c++
取得源碼
在 sourceforge 下載
codeblocks-20.03.tar.bz2 得到源碼, tar -jxvf codeblocks-20.03.tar.bz2
解壓得到 codeblocks.spec.fedora ,放在 SPECS 下。
注意這里使用 codeblocks.spec.fedora
而不是 codeblocks.spec
。
小幅修改
- src/plugins/contrib/dragscroll/dragscrollcfg.h:38
感謝福萊的指導~
將 virtual void InitDialog(){ asm("int3");}
改為 virtual void InitDialog(){ asm("break");}
- src/src/Makefile.am:37
LDADD 修改如下:
codeblocks_LDADD = ../sdk/libcodeblocks.la \
$(WX_LIBS) \
$(WX_GTK_LIBS) -lgobject-2.0
- 重新打包
重新打包,並放到 SOURCES 目錄下。
tar -jcvf codeblocks-20.03.tar.bz2 codeblocks-20.03
cp -v codeblocks-20.03.tar.bz2 ../SOURCES/
+ 取消編譯部分組件
為啥不編譯,還不是因為太菜不會改。
文件 src/plugins/contrib/Makefile.am:38 ,注釋掉以下語句:
MAYBE_DRAGSCROLL=dragscroll appdata
#不編譯 dragscroll 插件
原因是 src/plugins/contrib/dragscroll/dragscrollcfg.h:38 有一段 x86 匯編 asm("int3");
+ 修改 spec`
打開 codeblocks.spec.fedora ,刪除下列行:
# line 276
%{pkgdatadir}/dragscroll.zip
# line 320
%{plugindir}/libdragscroll.so
依賴包
rpmbuild -bb codeblocks.spec.fedora
運行之,會自動檢查缺少的依賴,具體以上面命令的輸出為准。
sudo dnf install astyle-devel boost-devel bzip2-devel gamin-devel hunspell-devel libICE-devel libtool squirrel-devel tinyxml-devel wxGTK-devel zlib-devel
編譯打包
rpmbuild -bb codeblocks.spec.fedora
也就半個小時吧,編譯成功后可以在 “RPMS” 目錄下找到所得的包。
由於我的機器使用的是已經服役多年的機械硬盤,如果使用固態硬盤應該並不需要半個小時。之后我又在龍芯的虛擬機中編譯了一次,非常驚人,只慢了五分鍾。
一共有十個包:
codeblocks-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-contrib-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-contrib-debuginfo-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-contrib-devel-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-contrib-libs-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-contrib-libs-debuginfo-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-debuginfo-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-devel-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-libs-20.03-1.fc28.lemote.mips64el.rpm
codeblocks-libs-debuginfo-20.03-1.fc28.lemote.mips64el.rpm
安裝 codeblocks-20.03-1.fc28.lemote.mips64el.rpm
和 codeblocks-libs-20.03-1.fc28.lemote.mips64el.rpm
就可以,運行飛快,暫時沒發現什么bug。
一個坑
- /bin/sh: 第 20 行: cd: bzip2: No such file or directory
編譯到 help_plugin 時報的錯,折騰了一個上午。本來源碼里是有 bzip2 這個目錄的,但是 configure 的時候刪了,有如下輸出。
+ rm -rf src/plugins/contrib/devpak_plugin/bzip2
+ rm -rf src/plugins/contrib/help_plugin/bzip2 src/plugins/contrib/help_plugin/zlib
試着手動修改 Makefile ,加上 -lbz2
,報 “/usr/bin/ld: cannot find -lbz2”。於是試着找bzip2的lib,居然在找到一個 “/usr/lib32/pkgconfig/bzip2.pc”,為啥在 lib32 ?試着按照里面的,用 -L$/usr/lib32 -lbz2
,果然也不行,報 “error adding symbols: File in wrong format”。
剛開始明明已經裝了 bzip2-devel ,哪能沒有?看了一下系統里的確有, file /usr/lib32/libbz2.so.1.0.6
居然是 n32 的,壓根不能用啊。
一度以為包出問題了,回頭看了之前安裝的包: sudo dnf list installed|grep bzip2
,敲,給我裝了個 bzip2-devel.mipsn32el
。手動安裝 sudo dnf install bzip2-devel.mips64el
后解決。
所以……安裝依賴包的時候得注意下…… qaq
by sdust weilinfox
本文地址 https://www.cnblogs.com/weilinfox/p/12997054.html
轉載請注明出處。