从零开始编译安装 Extcalc
Extcalc 是个非常强大的计算器,同时也是一个非常老的软件包,已经不再更新。希望使用 apt-get 或是 dnf 安装已经不可能,更何况我是在 mips 的龙芯 3A 上。唯一的方法就是编译安装。
我是在龙芯 3A4000 + Debian10 上完成安装的,其他系统可能有些许差别。
编译安装
- 获得源码包
从它的 sourceforge 首页获得源码包: 传送门
- 编译
README 内容的部分翻译:
依赖的软件:
Linux
GCC 4
QT4.3 或更高版本
OpenGL
cmake
如果有缺少,安装即可。对于 GCC 4,我的版本是 gcc version 8.3.0 (Debian 8.3.0-6)
,编译没有大问题。对于 QT4.3, Debian 下运行 sudo apt-get install qt4-dev-tools
安装
- 解压缩 (tar -xzf extcalc-0.9.3.tar.gz)
- 切换到目录 (cd extcalc-0.9.3)
- 运行 configure (cmake .)
- 编译 (make)
- 切换为超级用户 (su)
- 安装 (make install)
按部就班来就可。
① cmake .
第一次编译,报错说找不到 qtcore,但是我可以手动找到它。于是我安装了 cmake-gui
: sudo apt-get install cmake-qt-gui
,使用 cmake-gui .
代替 cmake .
。
cmake-gui .
显示 QT_QTCORE_LIBRARY_DEBUG
和 QT_QTCORE_LIBRARY_RELEASE
无法找到,全部手动定位为 /usr/lib/mips64el-linux-gnuabi64/libQtCore.so.4
即可。
单击 Generate 之后再次报错,显示无法找到 QT_MOC_EXECUTABLE
、 QT_RCC_EXECUTABLE
、QT_UIC_EXECUTABLE
和 QT_INCLUDE_DIR
。分别单击 Add Entry 添加,前三个 Type 选为 FILEPATH ,分别对应为 /usr/bin/moc
、/usr/bin/rcc
和 /usr/bin/uic
,最后一个 Type 选为 PATH,Value 为 /usr/share/qt4/include
。再次单击 Generate 即成功。
第一次编译我发现没有 qt4 的 include ,于是安装了 qt4-dev-tools
。第二次尝试重现错误时错误消失。
② make
Warning 有忽略函数返回值和 string 强制转换为 char* ,没有什么大问题。
一个 error :
/usr/bin/ld: CMakeFiles/extcalc.dir/src/graphout.o: undefined reference to symbol 'glBlendFunc'
/usr/bin/ld: //lib/mips64el-linux-gnuabi64/libGL.so.1: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/extcalc.dir/build.make:994:extcalc] 错误 1
make[1]: *** [CMakeFiles/Makefile2:73:CMakeFiles/extcalc.dir/all] 错误 2
make: *** [Makefile:152:all] 错误 2
可见是 build.make 的第994行出错,看看是啥:
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/extcalc.dir/link.txt --verbose=
link.txt 里面是用 c++ 把所有 .o 进行链接,而 glBlendFunc 是 Opengl 的一个函数,怀疑是编译选项的问题。最后加上 -lGL
的选项再重新 make
即可成功完成编译。
- 安装
③ make install
su
切换为超级用户后 make install
即可安装成功。命令行 extcalc
或单击其应用程序图标即可运行~
- 卸载
安装后,查看目录里有个 install_manifest.txt 文件,保留它。如果需要卸载,运行 cat install_manifest.txt | sudo xargs rm
即可。
生成 Debian 包
这一部分内容的可行性和是否会对系统造成损害将由读者自行判断
(这是我第一次打包)
① 编辑 CMakeLists.txt
SET(CPACK_INSTALL_CMAKE_PROJECTS "<路径>;Extcalc;ALL;/")
一行中的 <路径>
改为你现在所在编译目录的路径;
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386")
这有两行同样的,把 i386
改为你编译生成的二进制文件的体系架构,比如我这里是 mips64el
。
修改后保存。
CMakeLists.txt 本身已经把所有需要的设置都搞好了,我们直接生成它就好了。
cpack -G DEB
生成deb包, cpack -G RPM
生成rpm包。
也可以使用 checkinstall ,但是不太会用:
② 安装 checkinstall
sudo apt-get install checkinstall
③ sudo checkinstall
sudo checkinstall
,它会提示你输入描述和确认一些东西,看情况选择即可。
最后显示 创建 Debian 包……OK
则创建成功,它同时会替你安装这个包,显示 安装 Debian 包……OK
。
如此,我们可以方便地通过 dpkg 卸载它,也可以方便地用于下一次安装。
by SDUST weilinfox
本文地址:https://www.cnblogs.com/weilinfox/p/12650351.html
从零开始编译安装 Extcalc的更多相关文章
- LINUX 编译安装 PHP 环境
今天终于有时间 总结一下 linux 的编译安装 php 环境同学给我发了他写的文档 ,基本就可以实现编译安装了我同学文章地址: http://penghui.link/articles/2016/0 ...
- Centos6.5下编译安装mysql 5.6
一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...
- CENTOS 6.5 平台离线编译安装 PHP5.6.6
一.下载php源码包 http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror 二.编译 编译之前可能会缺少一些必要的依赖包,加载一个本地yum ...
- Linux下编译安装Vim8.0
什么是Vim? Vim 是经典的 UNIX 编辑器 Vi 的深度改良版本.它增加了许多功能,包括:多级撤销.格式高亮.命令行历史.在线帮助.拼写检查.文件名补完.块操作.脚本支持,等等.除了字符界面版 ...
- OpenSUSE下编译安装OpenFoam
在不是Ubuntu系统下安装OpenFoam,需要采用编译安装的方式.以下以OpenSuSE为例进行编译安装. 1 软件包准备 需要下载两个程序包: OpenFOAM-4.x-version-4.1. ...
- 不要着急改代码,先想想--centos 6.8下编译安装tmux
诸位读者新年好,2017开年第一篇博客,请允许我先问候一下看到这篇博客的诸位.写博客是我2017年定下的目标之一,希望我会坚持下去. 最近打算尝试一下tmux这个神器,于是有了这一篇关于思维方式的Bl ...
- protobuf的编译安装
github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在centos7下编译源码进行安装. github上有详细的安装说明: ...
- 编译安装mysql
参考:http://www.centoscn.com/CentosServer/www/2015/0422/5245.html 安装mysql5.6.17 1.按照标准需要给mysql创建所属用户和用 ...
- 编译安装zabbix3.2
1.1 环境准备 系统环境准备:redhat 6.6 64位mysql-5.6.34php-5.6.28zabbix-3.2.1配置前先关闭iptables和SELINUX,避免安装过程中报错. # ...
随机推荐
- Function.prototype.call.apply()方法
在看uncurrying化函数时候,碰到了Function.prototype.call.apply()的用法: 先说说uncurrying()函数: Function.prototype.uncur ...
- python笔记28(TCP,UDP,socket协议)
今日内容 1.TCP协议 协议的特点:三次握手,四次挥手: 2.UDP协议 3.OSI七层模型:每层的物理设备,每一层协议. 4.代码部分: ①介绍socket: ②使用socket完成tcp协议的w ...
- 获取View的快照
//获取快照 - (UIView*)customSnapshotInView:(UIView*)inview { UIView *snapshot = [inview snapshotViewAfte ...
- [pdo_mysql.lo] Error 1 或者 [php_mysql.lo] Error 1
make: *** [pdo_mysql.lo] Error 1 make: *** [php_mysql.lo] Error 1 这是因为这是因为在编译时需要 MySQL 的头的文件.而它按默认搜索 ...
- Oracle - 坏块修复(一)
一.概述 本文将介绍如何模拟坏块,以及出现坏块该如何修复.实验分为以下几个步骤. 1. 表出现坏块 2. 索引出现坏块 二.环境准备 本实验都是在oracle 11G归档模式下进行. 1. 准备相关表 ...
- django 从零开始 6 数据库模型增删改查
这些都是凭记忆写下的,有些会漏掉,在之后的笔记中会写 和flask query不同,django是使用objects进行一个查询 查询 单条记录 django 模型.bojects.get(查询的字段 ...
- css 一行自适应等比例布局
一.浮动布局+百分比 .row { width:100%; overflow:hidden; zoom:1; } .item { float: left; width: 20%; } 该样式兼容性较好 ...
- Simulink仿真入门到精通(十) S函数
10.1 S函数概述 S函数也称为Simulink中的系统函数,是用来描述模块的Simulink宏函数,支持M.C等多种语言.当Simulink默认的模块不能满足用户的需求时,用户可以通过S函数自己打 ...
- Expression表达式目录树
一.初识Expression 1.在上一篇我们讲到了委托(忘记了可以在看看,点赞在看养成习惯),今天要讲的Expression也和委托有一点点关系吧(没有直接关系,只是想要大家看看我其他的文章),Ex ...
- php 生成游戏兑换码(礼包)方法
最近项目中要做礼包码生成,看了看网上的代码,可以使用php扩展unid 当然我这里并不是用的unid,而是使用的php自带的uniqid,人狠话不多.看代码 /** * 生成礼包接口 100W数据同时 ...