中标麒麟V7 64bit 配置 Qt 32/64 bit

中标麒麟V7 64bit 配置 Qt 32/64 bit

  • 基本环境
    • 1. 系统:中标麒麟 / CentOS7
    • 2. Qt:Qt-5.5.1-32位/Qt-5.13.1-64位
  • 配置步骤
    • 1. 配置32位编译环境
    • 2. 安装Qt 64/32 bit
    • 3. freetype 和 dbus
    • 4. gdb 和 cmake
    • 5. 套件配置
    • 6. 测试

基本环境

1. 系统:中标麒麟 / CentOS7

当前系统为 NeoKylin Linux Advanced Server V7Update4 64bit,基于CentOS7

2. Qt:Qt-5.5.1-32位/Qt-5.13.1-64位

在线安装包:qt-unified-linux-x64
使用在线安装包可以减少维护工具更新的次数和一些奇怪的问题。

配置步骤

1. 配置32位编译环境

  • 配置

    CentOS 7 64位系统是没有32位编译环境的,所以需要先行配置。如果没有32位编译环境的话,在编译32位程序时会报头文件的错误。

    yum install -y glibc-devel.i686
    yum install -y libsdtc++-devel.i686
    
  • 提示

    在安装libsdtc++-devel.i686时可能会报各种已有依赖的错误,用yum把这些依赖的都删了然后重试即可

  • 测试

    安装完后,我们写一个HelloWorld.cpp,然后用g++去编译它

    g++ -m32 HelloWorld.cpp -o HelloWorld
    

    没有报错即是成功

2. 安装Qt 64/32 bit

由于我们使用的是64位在线安装包,所以还需要加上32位的存储库(资料档案库)。
我们打开安装程序,在左下角找到设置,然后打开存储库选项,在用户存储库里加上中科大的镜像链接:
http://mirrors.ustc.edu.cn/qtproject/online/qtsdkrepository/linux_x86/root/qt/
这样我们就可以同时安装64位和32位Qt了。
Qt对于32位Linux的支持只到5.5.1,再往后就得自己编译了。
我们找到目前的最高版本5.13.1,勾上gcc、source和debug info,其他的按需添加即可。
32位版本最高只到5.5.1,我们勾上gcc和source。
然后一路狂奔。
中标麒麟V7 64bit 配置 Qt 32/64 bit_第1张图片

3. freetype 和 dbus

  • freetype

    安装完Qt之后,我们在终端打开QtCreator,发现报错

    libQt5XcbQpa.so.5: undefined symbol: FT_Get_Font_Format

    这是缺失了freetype的库。
    用yum检查过,发现本机上已经有freetype了,但是版本比较旧,我们也不需要强行升级它,只需要它的库就行了,所以我们下载它的最新源码,编译安装后把库复制到QtCreator的lib里去就行。
    如果直接替换系统库的话可能破坏系统,造成不必要的损失!本来之前我是直接替换的,直到重装了N次……
    configure的时候可能会警告说需要安装docwriter,但是这个不影响,我们忽略掉它。

    wget http://download.savannah.gnu.org/releases/freetype/freetype-2.10.0.tar.bz2
    tar xvfz freetype-2.10.0.tar.bz2
    cd freetype-2.10.0
    ./configure --prefix=/opt/freetype-2.10.0
    make && make install
    cp /opt/freetype-2.10.0/lib/libfreetype.so.6.17.0 /opt/Qt/Tools/QtCreator/lib/Qt/lib/
    cd -
    cd /opt/Qt/Tools/QtCreator/lib/Qt/lib/
    ln -sf libfreetype.so.6.17.0 libfreetype.so.6
    ln -sf libfreetype.so.6.17.0 libfreetype.so
    cd -
    
  • dbus
    我们再次通过终端打开QtCreator,发现还是报错

    version LIBDBUS_1_3 not defined in file libdbus-1.so.3 with link time reference

    这个是dbus库的问题,我们还是像freetype一样编译安装复制到QtCreator的库目录里
    编译dbus,我们首先需要安装expat,这个我们可以通过yum安装

    yum install -y expat-devel
    
    wget https://dbus.freedesktop.org/releases/dbus/dbus-1.13.12.tar.xz
    xz -d dbus-1.13.12.tar.xz
    tar xvf dbus-1.13.12.tar
    cd dbus-1.13.12
    ./configure --prefix=/opt/dbus-1.13.12
    make && make install
    cp /opt/dbus-1.13.12/lib/libdbus-1.so.3.26.1 /opt/Qt/Tools/QtCreator/lib/Qt/lib/
    cd -
    cd /opt/Qt/Tools/QtCreator/lib/Qt/lib/
    ln -sf libdbus-1.so.3.26.1 libdbus-1.so.3
    ln -sf libdbus-1.so.3.26.1 libdbus-1.so
    cd -
    

    安装完后我们就可以成功打开QtCreator了

  • 32位的freetype和dbus可以直接用yum安装,这个版本直接用yum的版本就好,不需要编译最新代码

    yum install -y freetype-devel.i686
    yum install -y dbus-devel.i686
    

    安装完后之前创建的软链接可能会被重新指向,最好检查以下,再指向一次

  • 参考链接 http://www.pianshen.com/article/3003418461/

4. gdb 和 cmake

我们打开QtCreator的菜单-工具-选项,找到里面的套件,可以看到套件上有黄色三角符号,像这样
中标麒麟V7 64bit 配置 Qt 32/64 bit_第2张图片
按照上面的描述,我们需要安装合适版本的CMake和gdb。
参考链接:https://blog.csdn.net/zzy090707/article/details/90636589

  • gdb-8.3
    安装前需要先安装texinfo,用yum即可。
    如果已经安装了python-2.7但还是报错找不到可用的python,安装python-devel即可。
    yum install -y texinfo python-devel
    
    wget ftp://sourceware.org/pub/gdb/releases/gdb-8.3.tar.xz
    xz -d gdb-8.3.tar.xz
    tar -xvf gdb-8.3.tar
    cd gdb-8.3
    ./configure --prefix=/opt/gdb-8.3/ --with-python='/usr/bin/python2.7'
    make && make install
    
  • cmake-3.14.4
    wget https://github.com/Kitware/CMake/releases/download/v3.14.4/cmake-3.14.4.tar.gz
    tar -xvf cmake-3.14.4.tar.gz
    cd cmake-3.14.4
    ./bootstrap --prefix=/opt/cmake-3.14.4/
    make && make install
    

5. 套件配置

  • 安装完gdb和cmake后,我们在刚刚的界面的debugger和cmake页面上配置好刚安装的gdb和cmake,点击应用。然后在套件页面,把这两个配置上去。可以看到64位套件已经正常,但是32位套件还是有警告,按照说明是没有合适的gcc。
  • 64位系统里的gcc默认是64位,所以我们需要把GCC的能力集改为32位的。在旁边的编译器页面上,把C/C++的GCC分别克隆一下,改下名,比如GCC_32。在属性的最下面的ABI选项里,在最后面有个位数的选项,我们看到现在上面的是64,我们把它改成32位即可。两个GCC都改完后,点击应用。然后切换回套件页面,把GCC_32配置到32位套件即可。

6. 测试

  1. 套件配置完后,我们写个HelloWorld测试一下。
    64位顺利通过,但是32位报了错。
    在这里插入图片描述
    按照描述,应该是32位编译系统不完整,缺少了glib2

    yum install -y glib2.i686
    

    安装完glib2之后就可以顺利编译了。
    编译后我们找到生成的应用程序文件,用objdump -a查看其位数,对应上即为成功

  2. 我们再写个窗口测试一下
    这时发现64位编译失败,报的错误是找不到-lGL,这是openGL的库,我们安装一下
    或者也可以参考这篇文章,去掉-lGL的链接选项 https://www.cnblogs.com/chwit/p/10280120.html

    yum install -y mesa-libGL-devel mesa-libGL-devel.i686
    

    安装完之后64位顺利启动,但是32位的又出问题了。

    This application failed to start because it could not find or load the Qt platform plugin “xcb”.
    Available platform plugins are: linuxfb, minimal, offscreen, xcb.
    Reinstalling the application may fix this problem.

    我们进入32位QT目录里的 /opt/Qt/5.5/gcc/plugins/platforms/,这里面有4个库,就是上面提到的。
    我们用ldd查看以下依赖关系,给找不到的都安装一下,用yum就行。

    yum install -y libXrender.i686
    yum install -y libICE-devel.i686 
    yum install -y libXi-devel.i686
    yum install -y libSM-devel.i686
    

    如果有不认识的库,可以用yum search找一下。也可以去https://pkgs.org/download/把库名打上去找,去掉版本号加上devel就是开发版的库名。

    安装完之后32位的窗口也顺利启动,大功告成。

你可能感兴趣的:(Qt,Linux)