中标麒麟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位程序时会报<gnu/stubs-32.h>头文件的错误。
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。
然后一路狂奔。
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的菜单-工具-选项,找到里面的套件,可以看到套件上有黄色三角符号,像这样
按照上面的描述,我们需要安装合适版本的CMake和gdb。
参考链接:
- 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. 测试
- 套件配置完后,我们写个HelloWorld测试一下。
64位顺利通过,但是32位报了错。
按照描述,应该是32位编译系统不完整,缺少了glib2
yum install -y glib2.i686
安装完glib2之后就可以顺利编译了。
编译后我们找到生成的应用程序文件,用objdump -a查看其位数,对应上即为成功
- 我们再写个窗口测试一下
这时发现64位编译失败,报的错误是找不到-lGL,这是openGL的库,我们安装一下
或者也可以参考这篇文章,去掉-lGL的链接选项
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位的窗口也顺利启动,大功告成。