最近由于手上的ARM开发板升级到了3.14,所以也打算将Qt的开发环境由4.8.5 升级到 5.7/5.9 。主要是因为实际使用发现,在4.8.5的平台上Qt有不少的Bug,由此担心稳定性问题。另外,Qt5是Qt的未来,借此可以进一步学习Qt5的开发,新的系统所配置的交叉编译工具链也支持c++11的开发,借此也可以体验下。
准备
- 准备一个Linux 64位的机器,虚拟机也行。
- 准备一个嵌入式交叉编译工具,这里我用的是 gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf.tar.xz。
并且配置好环境变量:1 2 3
| export ARCH=arm export CROSS_COMPILE=/opt/arm-linux-gnueabihf/bin/arm-linux-gnueabihf- export PATH=/opt/arm-linux-gnueabihf/bin/:$PATH
|
- 下载Qt5.7源码
- 创建编译后的安装目录 /opt/qt570-arm
编译
编译Qt SDK
进入qtbase/mkspec,修改现有的平台linux-g++ linux-arm-gnueabi-g++下的qmake.conf文件。支持linuxfb插件的配置修改后的内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| # # qmake configuration for building with arm-linux-gnueabi-g++ #
MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib QT_QPA_DEFAULT_PLATFORM = linuxfb QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf)
# 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 load(qt_config)
|
进入到源码根目录,创建一个build.sh文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #!/bin/sh
./configure -verbose \ -prefix /opt/qt570-arm \ -opensource \ -confirm-license \ -release \ -shared \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-zlib \ -qt-libpng \ -no-opengl \ -no-sse2 \ -no-openssl \ -no-nis \ -no-opengl \ -no-cups \ -no-glib \ -no-separate-debug-info \ -no-accessibility \ -nomake examples \ -nomake tests \ -nomake tools \ -skip qtvirtualkeyboard
|
其中最重要的就是 -prefix /opt/qt570-arm
和 -xplatform linux-arm-gnueabi-g++
这2个选项。这里在前面已经处理好了,/opt/qt570-arm 表示安装目录; linux-arm-gnueabi-g++ 对应 qtbase/mkspec目录下的linux-arm-gnueabi-g++平台文件,编译会根据此目录下的qmake来配置生成makefile。
注意:编译Qt5.9手续要的configure配置与5.7有少许的不同,有些配置选项是无效的,根据提示删除不支持的选项即可。
make && make install
前面一步成功之后,使用sudo make -j2 执行即可。编译完成后,再使用sudo make install。
编译tslib
由于我暂时不需要用到触摸板,因此并不需要tslib库。如有需要,可以上网进一步查询资料进行交叉编译即可
交叉编译libiconv-1.15
交叉编译libiconv-1.15会得到preloadable_libiconv.so库,交叉编译的命令如下:
1 2 3
| ./configure CC=arm-linux-gnueabihf-gcc --prefix=/home/dejary/libiconv-1.15-arm --host=arm-linux $ make $ make install
|
preloadable_libiconv.so在安装目录lib中(/home/dejary/libiconv-1.15-arm/lib)
交叉编译gdb
QtCreator配置
部署和运行
启动程序前必须先设置好相关的环境变量,按照如下的设置即可。
1 2 3 4 5 6 7 8
| export QTDIR=/opt/qt570-arm export PATH=$T_ROOT/bin:$PATH export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib:/lib:/usr/local/lib export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480 #export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=480x272:mmsize=95x53:offset=0x0 export QT_QPA_FONTDIR=$QTDIR/lib/fonts export LD_PRELOAD=/usr/lib/preloadable_libiconv.so
|
上述的设置都是必需的选项,其它含义也比较清晰明确。
参考资料
- ubuntu16.04编译ARM版Qt5.7.0+开发板远程调试