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

转载请注明出处。

编译安装 codeblocks 20.03 mips64el的更多相关文章

  1. Linux下编译安装qemu和libvirt

    目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3  ...

  2. Linux下编译安装qemu和libvirt【转】

    转自:http://www.cnblogs.com/findumars/p/5679742.html 目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 ...

  3. Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Mariadb 10.1.20 + Nginx 1.10.2 + PHP 7.1.0 + Laravel 5.3 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...

  4. 03 编译安装apache的简易配置

    1.监听端口,默认为80,在主配置文件 /etc/httpd24/httpd.conf中可以更改 2.持久连接 Include /etc/httpd24/extra/httpd-default.con ...

  5. centos编译安装php5.6.20+nginx1.8.1+mysql5.6.17

    LNMP 代表的就是:Linux系统下Nginx+MySQL+PHP这样的站点服务器架构. 本次实践需求: 实践centos6.5编译安装 LNMP生产环境 架构 web生产环境 使用 xcache ...

  6. LNMP搭建03 -- 编译安装PHP

    [编译安装PHP]  为了顺利安装PHP,先安装下面这些: [CentOS 编译 PHP 前要做的事情] yum install -y gcc gcc-c++  make zlib zlib-deve ...

  7. Mapnik 3.0.20编译安装

    1. 确定epel安装 yum install -y epel-release 2. 按照<CentOS7.2部署node-mapnik>一文中的步骤,手动安装 gcc-6.2.0 和 b ...

  8. centos6.5下编译安装mariadb-10.0.20

    源码编译安装mariadb-10.0.20.tar.gz 一.安装cmake编译工具 跨平台编译器 # yum install -y gcc* # yum install -y cmake 解决依赖关 ...

  9. mysql-5.5.20预编译安装

    1.MYSQL数据库概念 1)MYSQL是一款关系型数据库系统,数据之间有互相联系,互相的关联和调用的. 2)MYSQL数据用于存储:WEB网站用户名和密码等 3)MYSQL存储数据库是通过二维表格形 ...

随机推荐

  1. java中文上传下载功能实现(自己测试项目)

    1.新建maven项目打war包 2.搭建springMVC框架 web.xml文件配置 <?xml version="1.0" encoding="UTF-8&q ...

  2. eclips快捷键

    所谓"工欲善其事必先利其器",程序写多了,对于快捷键总有些特别的偏爱.在众多编辑器中,Eclipse算是用的比较多,也是最熟的. 最常用(也是最爱的:)) Ctrl+' :  自动 ...

  3. [leetcode712]202. Happy Number判断快乐数字

    题目很简单,就是用哈希表存,判断有没有重复 学到了:java中字符串的比较有两种: 1.==这种是比较引用,只用两个字符串变量指向同一个地址才相等 2..equals()这种是值的比较,只要两个字符串 ...

  4. HTTP 常用状态码200 301 302 403 500

    200(OK):成功处理了请求. 301 redirect: 301 代表永久性转移(Permanently Moved) //助记 1 永恒,如果你记住了这一条就算这篇博客没白写.302 redir ...

  5. 自动化运维工具-Ansible之1-基础

    自动化运维工具-Ansible之1-基础 目录 自动化运维工具-Ansible之1-基础 Ansible 基本概述 定义 特点 架构 工作原理 任务执行模式 命令执行过程 Ansible 安装 Ans ...

  6. Linux 时间同步 04 ntp时间同步

    Linux 时间同步 04 ntp时间同步 目录 Linux 时间同步 04 ntp时间同步 安装ntp 配置与外部时间服务器进行时间同步的客户端主机 配置其他客户端与以上客户端主机时间同步 验证查看 ...

  7. Shell 编程(一)

    为什么学习 Shell 编程? 用 shell 来进行服务器的管理或维护 对于大数据程序员来说,需要编写 shell 来管理集群 Shell 是什么?   Shell 是一个命令解释器,它为用户提供了 ...

  8. 2021升级版微服务教程—为什么会有微服务?什么是SpringCloud?

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

  9. gitlab git仓库地址修改后更新方法

    背景 由于gitlab地址修改后导致本地仓库的远程仓库失效 解决办法 直接修改本地的远程仓库地址 - 进入项目地址git remote -v 查看旧地址 - 更新指令 git remote set-u ...

  10. CS系统中分页控件的制作

    需求:在一个已有的CS项目(ERP中),给所有的列表加上分页功能. 分页的几个概念: 总记录数  totalCount (只有知道了总记录数,才知道有多少页) 每页记录数  pageSize (根据总 ...