国产飞腾服务器,银河麒麟操作系统,系统自带Qt 4.8和5.6,项目需要在离线状态下重新编译安装一个稳定版本,选择Qt 5.9.8,记录一下自己踩的坑吧。参考了许多大神的博客还有Qt源码内的README文档。
一、源码准备
-
Qt 5.9.8源码下载网址
一定要是红框框住的tar.xz
,而不能是.zip
,经本人尝试解压以后进行下面步骤会出现各种错误,可能是编码问题。 -
确保系统的
gcc
,g++
,python
,perl
等符合Qt安装要求,具体请参见Qt源码内的README
文档。随便在某处位置进入终端,输入:g++ --version gcc --version python perl -version
检查是否符合
README
中的系统要求。
二、编译安装Qt
2.1 解压文件
将下载好的源码压缩包放在/home/kylin/Qt_Source/
下,右键进入终端,执行:
kylin@kylin:~/Qt_Source$ xz -d qt-everywhere-opensource-src-5.9.8.tar.xz
kylin@kylin:~/Qt_Source$ tar -xvf qt-everywhere-opensource-src-5.9.8.tar
第一步解压xz
,第二步解压tar
,得到源码文件夹。
2.2 修改arm交叉编译器
然后进入源码解压后的目录qtbase/mkspecs/
,修改arm
平台交叉编译器,注意看注释说明:
kylin@kylin:~/Qt_Source/qt-everywhere-opensource-src-5.9.8$ vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# 修改以下内容,13行以后
# modifications to g++.conf
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_NM = arm-linux-gnueabihf-nm -P
QMAKE_STRIP = arm-linux-gnueabihf-strip
修改为这个样子,也就是将arm-linux-gnueabihf
替换为aarch64-linux-gnu
:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_NM = aarch64-linux-gnu-nm -P
QMAKE_STRIP = aarch64-linux-gnu-strip
想要检验一下的话,在控制台输入:
kylin@kylin:~$ aarch64-linux-gnu-g++ -v
如果有显示如下一大段内容,则该交叉编译器是没有问题的。
2.3 添加注释
然后修改~/Qt_Source/qt-everywhere-opensource-src-5.9.8/qtimageformats/src/3rdparty/libwebp/src/dsp/dsp.h
文件,注释一行内容:
//#define WEBP_USE_NEON // Android targets that might support NEON
//注释后就可以编译通过, 未出现问题,位置72行
2.4 输入配置指令和参数。
部分参数:
-prefix
指定安装路径。默认的安装目录和平台相关,但是在configure
时,可以通过-prefix
选项指定安装目录,比如./configure -prefix /usr/local/Qt-5.9
。这样一来,在执行make install
指令时,编译完成的bin
、lib
或者其他子目录就会拷贝到/usr/local/Qt-5.9/
目录中。- 交叉编译选项:
-xplatform
选项指定了目标平台和编译时使用的编译器,Qt支持的平台和编译器都在qtbase/mkspecs
目录中。比如,在Ubuntu Linux
系统中,Qt
能被多种编译器编译,比如clang
和g++
。如下所示,指定qtbase/mkspecs/linux-arm-gnueabi-g++
平台进行编译,也和刚刚修改的文件相对应。 -release
Compile and link Qt with debugging turned off.-opensource
Compile and link the Open-Source Edition of Qt.-shared
Create and use shared Qt libraries.-nomake <part>
Exclude part from the list of parts to be built.-xplatform <spec>
The operating system and compiler you are cross compiling to.See the README file for a list of supported operatingsystems and compilers.-no-iconv
Do not enable support for iconv(3).-qt-zlib
Use the zlib bundled with Qt.
执行如下指令:
kylin@kylin:~/Qt_Source/qt-everywhere-opensource-src-5.9.8$ ./configure -prefix /usr/local/Qt-5.9 -release -xplatform linux-arm-gnueabi-g++ -opensource -nomake examples -nomake tests -confirm-license -shared -no-iconv -qt-xcb
几分钟后配置检查完毕,输出:
...
...
...
Note: Also available for Linux: linux-clang linux-icc
Note: Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing.
Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into '/usr/local/Qt-5.9'.
可以看出,下一步执行make
,然后必须要继续执行make install
,如果按照源码根目录中的README
指示来,不修改交叉编译器设置,也不修改最后的安装目录,也不进行上述注释,直接输入:
./configure -prefix $PWD/qtbase -opensource -nomake tests
那么会提示Once everything is built, you should not run 'make install'
,直接进行一步make
即可,qt
会默认安装到源码目录下的qtbase
中,那么接下来的qmake
境配资也会不一样。
2.5 make & make install
kylin@kylin:~/Qt_Source/qt-everywhere-opensource-src-5.9.8$ make -j 4 -s
# 可以make -j 4 2>&1 | tee makeLog.txt将log打印到txt文件中查看
kylin@kylin:~/Qt_Source/qt-everywhere-opensource-src-5.9.8$ make install
# make install 2>&1 | tee installLog.txt
make
时间较长,大概要几个小时,make install
就快多了,耐心等待吧……最后结果:
到这一步,Qt
编译安装成功。见下一篇博文[银河麒麟]源码编译安装Qt Creater。
第一次接触银河麒麟系统,感触还挺大的。以前安装软件都是在windows
和linux
系统上,x86
架构机器,资料也很多,但这次是真的踩了大坑。反思一下自己有时候还是会陷入思维误区,自己还是一个比较固执的人,这样在某一件事上面花费的时间可能会比其他人大得多。当遇到一个问题的时候,真的不能怕麻烦,有时候你就停留在你思想的小圈子,什么都想怎么简单怎么来,到头来发现,你搞完一件事花的时间是其他人的几倍。真的要解决一个问题就得广泛搜集资料,抓住问题的细点,去搜索去研究,这样在全局上空你回过头来看,就会感觉豁然开朗,原来问题如此简单。