导
版权声明
导语
这一篇中我们做了 Qt 移植中最重要的一步工作,就是编译 Qt ,这样生成的库可以用来编译 Qt 程序,从而生成可以在开发板上运行的可执行文件。下一篇将在 Qt Creator 中关联生成的 Qt ARM 库,从而编译出可以在开发板上运行的可执行文件。
导语
前面我们测试了天嵌自带的
Qt
平台,从这一篇开始,我们将正式着手
Qt
的移植工作,就是首先编译出
ARM
版本的
Qt
库,然后用这个
Qt
库来编译可以在开发板上运行的
Qt
程序,最后将这个
Qt
程序放到开发板上运行。而进行
Qt
移植的第一步就是进行
Qt
库的交叉编译,所谓交叉编译,就是编译出的库文件是
ARM
版本的,它不支持
PC
平台,而使用这个库编译出的
Qt
程序只可以在
ARM
开发板上运行。
正文
一、编译前准备工作
1
、所需开发环境
2
、需要下载的文件
A) Qt
源代码文件:
qt-everywhere-opensource-src-5.4.0.tar.gz
,
下载后使用如下命令进行解压:
tar xvzf qt-everywhere-opensource-src-5.4.0.tar.gz
B) Opengl ES
库:
gpu-viv-bin-mx6q-3.10.17-1.0.0.tar.gz
下载地址为:
下载后使用如下命令进行解压:
tar xvzf gpu-viv-bin-mx6q-3.10.17-1.0.0.tar.gz
解压完成后进入gpu-viv-bin-mx6q-3.10.17-1.0.0
目录,该目录中有以下内容:
其中hardfp
中的内容是我们需要的。把hardfp
目录下的usr
目录拷贝到/opt/tqexlib/
目录下,此目录是自己定义的,读者可以拷贝到其它目录下,只需要在后边修改Qt
的编译配置文件的时候设置正确就可以了。
C
)编译器:
gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.bz2
下载完成后使用如下命令解压:
tar xvjf gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.bz2 -G
该命令会把编译器文件解压到:
/opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain
目录。
这时在/opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin
目录应该可以看到arm-fsl-linux-gnueabi-g++
等工具。
把上述这些文件准备好以后,就可以开始Qt
的交叉编译工作了。在这里先预祝各位读者一切顺利。
二、编译过程
1
、设置环境变量
使用如下命令设置环境变量:
exportPATH=$PATH:/opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin
这样设置的目的是为了让shell
可以找到移植过程中需要使用的交叉编译器。在shell
中输入:
arm-fsl-linux-gnueabi-
然后按两次TAB
键,如果出现如下内容就说明环境变量设置正确了。
2
、修改Qt
编译文件
天嵌的E9
开发板使用的是freescal
的imx6
系列的处理器,Qt
已经对该系统处理器进行了单独的支持,所以只需要修改对应的编译支持文件就可以了。先cd
到Qt
源码目录,然后使用如下命令查看该文件:
cat qtbase/mkspecs/devices/linux-imx6-g++/qmake.conf
在这个文件中指定了openGL ES
库的路径及头文件路径和需要引用的库。这里的目录使用的是/opt/tqexlib
,如果读者自己定义了OpenGL ES
库的路径,只需要进行相应的修改即可。
3
、配置Qt
在命令行使用cd
命令进入Qt 5.4
的源码目录,可以看到一个名为configure
的脚本文件,使用这个文件可以对Qt
源码进行配置,来指定源码中哪些部分需要编译进库中,哪些部分不需要编译到库中。正确执行这个脚本后会生成Makefile
文件。这里使用的配置命令如下:
./configure -v -prefix /usr/local/qte-arm -opensource -confirm-license -qt-sql-sqlite -qt-libpng -qt-libjpeg -qt-freetype -qt-pcre -no-compile-examples-device imx6 -no-xcb -no-directfb -linuxfb -no-kms -eglfs -qpa eglfs -opengl es2 -device-optionCROSS_COMPILE=/opt/Embedsky/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-
下边逐项对这里使用的参数进行解释:
执行完成configure
命令后,就生成了Makefile
文件,此时就可以进行编译了。
4
、编译和安装
生成了Makefile
,一切都准备好了,现在就让电脑去工作吧。输入:
make -j5
然后你就可以休息了。这里的-j5
参数是让编译过程分为5
个线程进行,可以提高编译速度。分为几个线程可以遵循“CPU
核心数 + 1”
的原则。例如:我的电脑是i5
处理器,双核四线程,所以我这里分成5
个线程进行。整个编译过程在我的电脑上需要大概40
分钟。忙了这么长时间去喝杯咖啡犒劳一下自己吧。
编译完成后,执行:
sudo makeinstall
好了,祝贺你,到这里Qt
库已经交叉编译完成了。
结
语
这一篇中我们做了 Qt 移植中最重要的一步工作,就是编译 Qt ,这样生成的库可以用来编译 Qt 程序,从而生成可以在开发板上运行的可执行文件。下一篇将在 Qt Creator 中关联生成的 Qt ARM 库,从而编译出可以在开发板上运行的可执行文件。