【导语】目前天嵌imx6Q、IMX6UL等平台默认提供的Qt版本是5.5,由于Qt版本不断更新,当现有版本的Qt库不能满足实际开发需求时,则需要进行Qt移植。本文就来介绍下如何将Qt5.9.5移植到arm开发板上。
1.准备工作
(1)主机环境:Ubuntu 16.04
开发板:天嵌IMX6Q_COREC(点此获取板载资源)
(2)下载Qt5.9.5源码包qt-everywhere-opensource-src-5.9.5.tar.xz
下载链接:关注【广州天嵌】公众号,查看原文
(3)安装IMX6Q配套交叉编译器5.3.1,因为Qt5.9.5支持C++11,所以交叉编译器版本需要高于4.8以上,gcc版本也建议在gcc 4.8以上版本,低于可能报错 unrecognized command line option "-std=c++11"
2.交叉编译Qt5.9.5源码
(1)拷贝Qt源码包至Ubuntu并解压
mm@ubuntu:~/work/qt5.9$ tar xvf qt-everywhere-opensource-src-5.9.5.tar.xz //解压
mm@ubuntu:~/work/qt5.9$ ls
qt-everywhere-opensource-src-5.9.5 qt-everywhere-opensource-src-5.9.5.tar.xz
(2)指定目标平台的架构和交叉编译器的类型
Qt5中针对不同的目标平台都有相应的配置文件夹,只需修改对应目标平台文件夹中的配置文件qmake.conf。
mm@ubuntu:~/work/qt5.9$ cd qt-everywhere-opensource-src-5.9.5/
mm@ubuntu:~/work/qt5.9/qt-everywhere-opensource-src-5.9.5$ vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
下面是修改后的qmake.conf,其中的内容需要根据自己的实际情况去修改,这里改动了交叉编译器名字
(3)根据需求配置Qt
配置Qt可以通过源码包中configure脚本来完成,运行configure脚本后会得到makefile文件,具体的可用配置可以执行./configure -help查看参数,根据自身需要进行配置,这里编写了一个脚本来实现配置的步骤。
mm@ubuntu:~/work/qt5.9/qt-everywhere-opensource-src-5.9.5$ vi build.sh
以下是build.sh内容
#!/bin/sh
export CROSS=arm-linux-gnueabihf-
CROSS_TOOLCHAIN_PATH=/opt/EmbedSky/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/sysroot_qt5.9
export PKG_CONFIG_PATH=${CROSS_TOOLCHAIN_PATH}/usr/lib/pkgconfig
./configure --prefix=${CROSS_TOOLCHAIN_PATH}/usr --bindir=${CROSS_TOOLCHAIN_PATH}/usr/bin --libexecdir=${CROSS_TOOLCHAIN_PATH}/usr/lib/dbus-glib --datadir=${CROSS_TOOLCHAIN_PATH}/usr/share --sysconfdir=${CROSS_TOOLCHAIN_PATH}/etc --libdir=${CROSS_TOOLCHAIN_PATH}/usr/lib
-confirm-license -opensource -release -make libs -xplatform linux-arm-gnueabi-g++ -optimized-qmake -pch
-qt-libjpeg -qt-libpng -qt-zlib
-gui
-no-opengl
参数-prefix指定了文件的安装路径,这里的安装路径是/opt/EmbedSky/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/sysroot_qt5.9,参数-xplatform指定了目标平台为linux-arm-gnueabi-g++。执行这个脚本后就会得到makefile文件,
(4)编译安装
执行make&&make install,然后开始漫长的编译过程,整个过程持续大概2个小时。
3.移植库并配置开发板环境
(1)移植所需的文件到ARM中
编译成功会在-prefix指定的安装路径中生成一系列文件夹
mm@ubuntu:~/work/qt5.9/qt-everywhere-opensource-src-5.9.5$ ls /opt/EmbedSky/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/sysroot_qt5.9/usr/
bin include lib mkspecs plugins qml share
mm@ubuntu:~/work/qt5.9/qt-everywhere-opensource-src-5.9.5$
将编译安装得到的lib、plugins拷贝到开发板中,lib中存放的是Qt程序运行所需的动态库文件,plugins中存放的是所需的插件,将相关文件、文件夹通过U盘或者网络方式拷贝到板子,这里通过网络传输,将相关文件拷贝到板子/opt/qt5.9文件夹中。
root@Embedsky:/opt/qt5.9# ls usr/
bin include lib mkspecs plugins qml share
root@Embedsky:/opt/qt5.9#
(2)配置环境执行qt程序
配置环境:
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/qt5.9/usr/plugins //插件路径
export LD_LIBRARY_PATH=/opt/qt5.9/usr/lib/ //库路径
export QT_QPA_PLATFORM=linuxfb
export QT_QPA_FONTDIR=/usr/lib/fonts //该处使用板子原有字体库
这时候相关库和环境已经有了,我们使用qmake编译一个现成的qt程序拷贝到板子,编译命令:
#/opt/EmbedSky/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/sysroot_qt5.9/usr/bin/qmake PDA.pro
#make
拷贝到板子/opt/qt5.9_demo目录下执行
root@Embedsky:/opt/qt5.9_demo# ./tqpda
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
QFontDatabase: Cannot find font directory /usrlib/fonts.
至此qt移植完成。
原文转自【广州天嵌】公众号,欢迎关注获取更多干货内容。
|