启扬智能-ARM嵌入式开发平台与方案提供商

才智横溢 / 卓越品质

超详细Qt5.9.5移植攻略

发布日期:2019/05/05 09:39:29 发布者:admin

导语:

目前启扬智能默认提供的Qt版本是4.8,但是现在已经发展到最新的5.9版本。当现有版本的Qt库不能满足实际开发需求时,则需要进行Qt移植。本文就来介绍下如何将Qt5.9.5移植到ARM开发板上。

以启扬imx6开发板为例,使用Ubuntu14.04虚拟机作为移植环境。

准备工作

1、主机环境:Ubuntu14.04;
开发板:启扬IAC-IMX6-kit;
(如果使用的是Ubuntu12.04,需要将gcc升级到4.8以上)
2、官网下载源码包
下载qt-everywhere-opensource-src-5.9.5.tar.xz,这里选择下载的是xz格式的源码包,而不是将源码和qtcreator打包好的run文件。因为试过run文件,一方面文件太大,另一方面安装得到的源码包和xz格式的有一些不同,比如找不到qt base,影响到后续的配置,所以最好选择xz格式。
3、解压
tar -zxvf qt-everywhere-opensource-src-5.9.5.tar.xz
4、配置交叉编译器的路径
因为Qt5.9.5支持C++11,所以编译器版本需要高于4.8以上,我采用了4.8.3版本编译器。
修改~/.bashrc 文件,在系统环境变量PATH中添加交叉编译器的路径。(路径以实际路径为准)
export PATH=/home/ubuntu1404/work/arm-2014.05/bin:$PATH
执行命令source ~/.bashrc
查看交叉编译器的路径是否已经添加到系统环境变量PATH中。
可以查看交叉编译器的版本号:
arm-none-linux-gnueabi-gcc-v
如果能够正常显示出交叉编译器的版本号,恭喜你,第一步已经成功了!

Qt5.9.5的交叉编译

1、指定目标平台的架构和交叉编译器的类型

Qt5中针对不同的目标平台都有相应的配置文件夹,只需修改对应目标平台文件夹中的配置文件qmake.conf。
cd qt-everywhere-opensource-src-5.9.5
vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
下面是修改后的qmake.conf,其中的内容需要根据自己的实际情况去修改。

这里修改了两个地方,一是定义了arm的架构,其中:QT_QPA_PLATFORM是指定QPA平台的插件,这里选择的是linuxfb,参数-O是编译器提供的优化选项,如-O、-O1、-O2、-O3等,代表不同的优化级别,参数-march后面指定的是目标处理器的架构(可能指定不同的架构会调用不同的指令集,猜的~);另外一个改动的地方就是将下面g++.conf和linux.conf中的参数值中加上了fsl,如arm-none-linux-gnueabi-gcc,这是我选择的交叉编译器,可以根据自身的情况修改。

2、根据需求配置Qt

配置Qt可以通过源码包中configure脚本来完成,运行configure脚本后会得到makefile文件,然后通过make和make install命令完成编译和安装。这里我编写了一个脚本来实现配置的步骤。

从shell脚本中可以看到,参数-prefix指定了文件的安装路径,我的安装路径是/opt/newQt5.9.5_arm/newQt5.9.5_arm_install,参数-xplatform指定了目标平台为linux-arm-gnueabi-g++。执行这个脚本后就会得到makefile文件,下一步就可以进行编译了。

3、 编译和安装

终于可以编译了,执行make&&make install命令,然后开始漫长的编译过程,整个过程持续大概2个小时。

移植所需的文件到ARM中

将编译安装得到的lib、plugins拷贝到开发板中,lib中存放的是QT程序运行所需的动态库文件,plugins中存放的应该是所需的插件。由于U盘挂载比较麻烦,这里选择使用scp命令,通过网络传输。

配置开发板环境并运行程序

修改/etc/QtEnv文件,设置开发板的环境变量,文件末尾添加的内容如下:
export LD_LIBRARY_PATH=/opt/Qt5.9.5_arm_install/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/Qt5.9.5_arm_install/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_FONTDIR=/opt/Qt5.9.5_arm_install/lib/fonts

4、编译输入法程序

将QtSoftKeyboard2018-03-03.zip拷贝到目录下解压
添加qmake到环境变量
export QTEDIR=/opt/newQt5.9.5_arm/newQt5.9.5_arm_install:$QTEDIR
export PATH=/opt/newQt5.9.5_arm/newQt5.9.5_arm_install/bin:$PATH
export LD_LIBRARY_PATH=/opt/newQt5.9.5_arm/newQt5.9.5_arm_install/lib: LD_LIBRARY_PATH
生成Makefile和编译
#qmake
#make
报错

修改PinYinFenCi.cpp文件的42行、88行、117行将toAscii()函数修改为toLatin1()
将/bin/目录下的InputTool和/db/目录下的pinyin.db拷贝到开发板同一个目录下
运行InputTool
报错

将/home/ubuntu1404/work/arm-2014.05/arm-none-linux-gnueabi/libc/lib/下的所有文件拷贝
到开发板的/lib/目录下
Qt界面不显示中文
将FZYTK.TTF文件拷贝到/opt/Qt5.9.5_arm_install/lib/fonts下没有fonts需创建
警告

解决方法
移植libiconv-1.14
./configure -prefix=$PWD/install -host=arm-none-linux-gnueabi
Make &&make install
将安装目录下lib目录下的preloadable_libiconv.so拷贝到开发板/system/lib目录下
添加环境变量export LD_PRELOAD=/system/lib/preloadable_libiconv.so
至此,Qt移植就已经大功告成了!