• 编译安装 codeblocks 20.03 mips64el


    期末考试要用哦,不然谁会愿意去踩这么多坑。 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)

    取得源码

    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");}

    • 重新打包

    重新打包,并放到 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
    

    环境变量

    这一部分似乎是我瞎搞导致的。我之后在虚拟机中重新编译了一次,没有遇到和环境变量有关的任何问题。如果遇到了类似的问题很可能是编译依赖的包没有安装全,才触发了一系列问题。

    为了解决各种错误……下面是对于不同错误的记录,实际使用时只要把所有 export xxx 在当前终端下运行一遍即可。

    • configure: error: Package requirements (xxx) were not met
    #/usr/lib64/pkgconfig/gtk+-2.0.pc
    export GTK_CFLAGS="-I/usr/include/gtk-2.0"
    export GTK_LIBS="-L/usr/lib64 -lgtk-x11-2.0"
    #/usr/lib64/pkgconfig/gdk-2.0.pc
    export GDK_LIBS="-L/usr/lib64 -lgdk-x11-2.0"
    export GDK_CFLAGS="-I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include"
    #/usr/lib64/pkgconfig/fontconfig.pc
    export FONTCONFIG_LIBS="-L/usr/lib64 -lfontconfig"
    export FONTCONFIG_CFLAGS="-I/usr/include"
    
    • xxx.h not find

    查看gcc默认include路径 gcc -v -x c -E /dev/null

    其实原因很简单,比如一个头文件通常是在 /usr/include/pango 下,实际却在 /usr/include/pango-1.0/pango 下,所以需要专门在环境变量中设置。

    export CPLUS_INCLUDE_PATH=/usr/include/c++/8:/usr/include:/usr/include/gtk-2.0:/usr/include/glib-2.0:/usr/lib64/glib-2.0/include:/usr/include/cairo:/usr/include/pango-1.0:/usr/lib64/gtk-2.0/include/:/usr/include/gdk-pixbuf-2.0:/usr/include/atk-1.0
    
    export C_INCLUDE_PATH=/usr/include:/usr/include/gtk-2.0:/usr/include/glib-2.0:/usr/lib64/glib-2.0/include:/usr/include/cairo:/usr/include/pango-1.0:/usr/lib64/gtk-2.0/include/:/usr/include/gdk-pixbuf-2.0:/usr/include/atk-1.0
    

    修改 Makefile

    在编译过程中, Makefile 生成后做,时间充裕。限于水平,我没有更好的办法。

    • src/src/Makefile:170

    少了一个 flag,会导致链接失败

    CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) 
    	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) 
    	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
    

    改为

    CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) 
    	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) 
    	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -lgobject-2.0 -o $@
    

    编译打包

    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.rpmcodeblocks-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
    转载请注明出处。

  • 相关阅读:
    1093. Count PAT's (25)
    1092. To Buy or Not to Buy (20)
    机器学习实战——k-邻近算法:约会网站
    1057. Stack (30)
    1017. Queueing at Bank (25)
    strcpy、strncpy和memcpy的用法比较
    华为笔试题--蛇形矩阵
    对于内核执行过程的理解
    pom.xml格式问题
    Json反序列化遇到的问题
  • 原文地址:https://www.cnblogs.com/weilinfox/p/12997054.html
Copyright © 2020-2023  润新知