国产飞腾服务器,银河麒麟操作系统,系统自带Qt 4.8和5.6,项目需要在离线状态下重新编译安装一个稳定版本,选择Qt 5.9.8,记录一下自己踩的坑吧。参考了许多大神的博客还有Qt源码内的README文档。

一、源码准备
  1. Qt 5.9.8源码下载网址
    一定要是红框框住的tar.xz,而不能是.zip,经本人尝试解压以后进行下面步骤会出现各种错误,可能是编码问题。在这里插入图片描述

  2. 确保系统的gccg++pythonperl等符合Qt安装要求,具体请参见Qt源码内的README文档。随便在某处位置进入终端,输入:

    g++ --version
    gcc --version
    python
    perl -version
    

    检查是否符合README中的系统要求。
    3.

二、编译安装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指令时,编译完成的binlib或者其他子目录就会拷贝到/usr/local/Qt-5.9/目录中。
  • 交叉编译选项:
    -xplatform选项指定了目标平台和编译时使用的编译器,Qt支持的平台和编译器都在qtbase/mkspecs目录中。比如,在Ubuntu Linux系统中,Qt能被多种编译器编译,比如clangg++。如下所示,指定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

第一次接触银河麒麟系统,感触还挺大的。以前安装软件都是在windowslinux系统上,x86架构机器,资料也很多,但这次是真的踩了大坑。反思一下自己有时候还是会陷入思维误区,自己还是一个比较固执的人,这样在某一件事上面花费的时间可能会比其他人大得多。当遇到一个问题的时候,真的不能怕麻烦,有时候你就停留在你思想的小圈子,什么都想怎么简单怎么来,到头来发现,你搞完一件事花的时间是其他人的几倍。真的要解决一个问题就得广泛搜集资料,抓住问题的细点,去搜索去研究,这样在全局上空你回过头来看,就会感觉豁然开朗,原来问题如此简单。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐