编译安装 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.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
转载请注明出处。
编译安装 codeblocks 20.03 mips64el的更多相关文章
- Linux下编译安装qemu和libvirt
目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3 ...
- Linux下编译安装qemu和libvirt【转】
转自:http://www.cnblogs.com/findumars/p/5679742.html 目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.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 查看硬 ...
- 03 编译安装apache的简易配置
1.监听端口,默认为80,在主配置文件 /etc/httpd24/httpd.conf中可以更改 2.持久连接 Include /etc/httpd24/extra/httpd-default.con ...
- centos编译安装php5.6.20+nginx1.8.1+mysql5.6.17
LNMP 代表的就是:Linux系统下Nginx+MySQL+PHP这样的站点服务器架构. 本次实践需求: 实践centos6.5编译安装 LNMP生产环境 架构 web生产环境 使用 xcache ...
- LNMP搭建03 -- 编译安装PHP
[编译安装PHP] 为了顺利安装PHP,先安装下面这些: [CentOS 编译 PHP 前要做的事情] yum install -y gcc gcc-c++ make zlib zlib-deve ...
- Mapnik 3.0.20编译安装
1. 确定epel安装 yum install -y epel-release 2. 按照<CentOS7.2部署node-mapnik>一文中的步骤,手动安装 gcc-6.2.0 和 b ...
- centos6.5下编译安装mariadb-10.0.20
源码编译安装mariadb-10.0.20.tar.gz 一.安装cmake编译工具 跨平台编译器 # yum install -y gcc* # yum install -y cmake 解决依赖关 ...
- mysql-5.5.20预编译安装
1.MYSQL数据库概念 1)MYSQL是一款关系型数据库系统,数据之间有互相联系,互相的关联和调用的. 2)MYSQL数据用于存储:WEB网站用户名和密码等 3)MYSQL存储数据库是通过二维表格形 ...
随机推荐
- JAVA十大经典排序算法最强总结(含JAVA代码实现)
0.排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序. 0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排 ...
- 基于MongoDB权限管理+gridfs文件上传------云盘系统
学了一会Mongo,开始毕设的编写. 毕设目前一共分为如下模块 用户管理模块 管理员管理模块 文件管理模块 分享模块 目前已经完成了权限管理部分的后端代码.上传下载已经实现Demo.先把权限弄好后在整 ...
- LeapMotion控制器 java语言开发笔记--(连接控制器)
(1)为了连接LeapMotion控制器,创建controller对象,这个对象自动创建与控制器的服务或者后台程序连接,然后捕获数据提供给你的应用程序.可以使用该对象来获取连接信息. (2)获取Fra ...
- Thread中run和start方法的模板设计模式
创建一个Thread需要继承Thread重写run方法或者实现Runnable接口中的run方法,其实两者都是一样因为Thread也继承了Runnable接口. 实现了run方法,但是启动确实用sta ...
- 使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes
介绍 本指南将引导您在 Kubernetes 集群上设置渐进式交付 GitOps 管道. GitOps Helm 研讨会 原文地址:GitOps Progressive Deliver with Fl ...
- Synchronized 精讲
1.简介 1.1 作用 在并发场景中,保证同一时刻只有一个线程对有并发隐患的代码进行操作 1.2 错误案例 需求:两个线程对 count 变量进行200000次循环增加,预期结果是400000次 pu ...
- 【SpringBoot1.x】SpringBoot1.x 任务
SpringBoot1.x 任务 文章源码 异步任务 在 Java 应用中,绝大多数情况下都是通过同步的方式来实现交互处理的.但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使 ...
- three.js 之cannon.js物理引擎
今天郭先生说的是一个物理引擎,它十分小巧并且操作简单,没错他就是cannon.js.这些优点都源自于他是基于js编写的,对于js使用者来说cannon.js拥有其他物理引擎没有的纯粹性.从学习成本来看 ...
- kubernets之DaemonSet
一 k8s资源之DaemonSet 1.1 介绍认识DaemonSet DaemonSet可以理解为一种比较特殊的RS,DaemonSet的作用是永远保持被指定的节点只运行一个pod的副本,可用作集 ...
- SDUST数据结构 - 19级期末考试
判断题: 选择题: 函数题: 6-1 统计二叉树叶子结点个数: 题目: 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typ ...