您的位置:首页 > 编程语言 > Qt开发

QT移植

2015-10-15 09:28 806 查看
导版权声明

该文章原创于Qter开源社区(www.qter.org),作者hzzhou,转载请注明出处!

导语

前面我们测试了天嵌自带的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,

下载地址为:http://download.qt.io/archive/qt/5.4/5.4.0/single/

下载后使用如下命令进行解压:

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

下载地址为:

http://repository.timesys.com/buildsources/g/gpu-viv-bin-mx6q/gpu-viv-bin-mx6q-3.10.17-1.0.0/

或到Qter开源社区下载

下载后使用如下命令进行解压:

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

到Qter开源社区下载

下载完成后使用如下命令解压:

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-

下边逐项对这里使用的参数进行解释:

[align=center]参数[/align]
[align=center]功能[/align]

[align=left]-prefix /usr/local/qte-arm[/align]

[align=left]指定Qt库和头文件等安装到/usr/local/qte-arm目录下,这个目录不是必须的,可以自己指定。[/align]

[align=left]-opensource -confirm-license[/align]

[align=left]使用opensource代码,并同意许可协议。开源版和商业版相对应的[/align]

[align=left]-qt-sql-sqlite[/align]

[align=left]使用qt的sqlite数据库[/align]

[align=left]-qt-libpng[/align]

[align=left]使用qt的png库[/align]

[align=left]-qt-libjpeg[/align]

[align=left]使用qt的jpeg库[/align]

[align=left]-qt-freetype[/align]

[align=left]使用qt的freetype库, freetype是一种字体格式[/align]

[align=left]-qt-pcre[/align]

[align=left]使用qt的pcre库[/align]

[align=left]-no-compile-examples[/align]

[align=left]不编译Qt提供的例程,这样可以加快编译速度,如果需要的时候可以单独编译。[/align]

[align=left]-device imx6[/align]

[align=left]指定使用的设备是imx6系统处理器[/align]

[align=left]-no-xcb[/align]

[align=left]不编译xcb支持[/align]

[align=left]-no-directfb[/align]

[align=left]不编译directfb支持[/align]

[align=left]-linuxfb[/align]

[align=left]编译linuxfb支持[/align]

[align=left]-no-kms[/align]

[align=left]不编译kms支持[/align]

[align=left]-eglfs[/align]

[align=left]编译eglfs支持[/align]

[align=left]-qpa eglfs[/align]

[align=left]指定qpa默认使用eglfs。[/align]

[align=left]-opengl es2[/align]

[align=left]使用opengl es2[/align]

[align=left]-device-option CROSS_COMPILE=/opt/Embedsky[/align]

[align=left]/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12[/align]

[align=left]/tq-linaro-toolchain/bin/arm-fsl-linux-gnueabi-[/align]

[align=left]指定编译器的路径和前缀[/align]

执行完成configure命令后,就生成了Makefile文件,此时就可以进行编译了。

4、编译和安装

生成了Makefile,一切都准备好了,现在就让电脑去工作吧。输入:

make -j5

然后你就可以休息了。这里的-j5参数是让编译过程分为5个线程进行,可以提高编译速度。分为几个线程可以遵循“CPU 核心数 +
1”的原则。例如:我的电脑是i5处理器,双核四线程,所以我这里分成5个线程进行。整个编译过程在我的电脑上需要大概40分钟。忙了这么长时间去喝杯咖啡犒劳一下自己吧。

编译完成后,执行:

sudo makeinstall

好了,祝贺你,到这里Qt库已经交叉编译完成了。

结 语

这一篇中我们做了Qt移植中最重要的一步工作,就是编译Qt,这样生成的库可以用来编译Qt程序,从而生成可以在开发板上运行的可执行文件。下一篇将在Qt
Creator中关联生成的Qt
ARM库,从而编译出可以在开发板上运行的可执行文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: