第4篇 交叉编译Qt 5.4.0
导版权声明
导语
前面我们测试了天嵌自带的Qt平台,从这一篇开始,我们将正式着手Qt的移植工作,就是首先编译出ARM版本的Qt库,然后用这个Qt库来编译可以在开发板上运行的Qt程序,最后将这个Qt程序放到开发板上运行。而进行Qt移植的第一步就是进行Qt库的交叉编译,所谓交叉编译,就是编译出的库文件是ARM版本的,它不支持PC平台,而使用这个库编译出的Qt程序只可以在ARM开发板上运行。 正文
一、编译前准备工作 1、所需开发环境 操作系统:ubuntu14.04 32 位;已设置好的Qt 5.4.0 开发环境(详见第3篇) 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 使用vi (或其他文本编辑器)打开这个文件并修改其内容如下图所示:(可以到Qter 开源社区下载修改好的文件)
在这个文件中指定了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- 下边逐项对这里使用的参数进行解释: 参数 | | -prefix /usr/local/qte-arm | 指定Qt库和头文件等安装到/usr/local/qte-arm目录下,这个目录不是必须的,可以自己指定。 | -opensource -confirm-license | 使用opensource代码,并同意许可协议。开源版和商业版相对应的 | | | | | | | | 使用qt的freetype库, freetype是一种字体格式 | | | | 不编译Qt提供的例程,这样可以加快编译速度,如果需要的时候可以单独编译。 | | | | | | | | | | | | | | | | | -device-option CROSS_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库,从而编译出可以在开发板上运行的可执行文件。
|