QT移植

版权声明

该文章原创于 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
下载后使用如下命令进行解压:
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
下载地址为:
或到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-
   
     下边逐项对这里使用的参数进行解释:
  
参数
  
功能
-prefix /usr/local/qte-arm
指定Qt 库和头文件等安装到/usr/local/qte-arm 目录下,这个目录不是必须的,可以自己指定。
-opensource -confirm-license
使用opensource 代码,并同意许可协议。开源版和商业版相对应的
-qt-sql-sqlite
使用qt sqlite 数据库
-qt-libpng
使用qt png
-qt-libjpeg
使用qt jpeg
-qt-freetype
使用qt freetype , freetype 是一种字体格式
-qt-pcre
使用qt pcre
-no-compile-examples
不编译Qt 提供的例程,这样可以加快编译速度,如果需要的时候可以单独编译。
-device imx6
指定使用的设备是imx6 系统处理器
-no-xcb
不编译xcb 支持
-no-directfb
不编译directfb 支持
-linuxfb
编译linuxfb 支持
-no-kms
不编译kms 支持
-eglfs
编译eglfs 支持
-qpa eglfs
指定qpa 默认使用eglfs
-opengl es2
使用opengl es2
-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 库,从而编译出可以在开发板上运行的可执行文件。

猜你喜欢

转载自blog.csdn.net/kang99827765/article/details/49148161
今日推荐