找回密码
 立即注册
收起左侧

第4篇 交叉编译Qt 5.4.0

34
回复
45045
查看
[复制链接]
累计签到:181 天
连续签到:1 天
来源: Qt教程 2015-4-28 22:25:39 显示全部楼层 |阅读模式
第4篇 交叉编译Qt 5.4.0


版权声明

该文章原创于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开发板使用的是freescalimx6系列的处理器,Qt已经对该系统处理器进行了单独的支持,所以只需要修改对应的编译支持文件就可以了。先cdQt源码目录,然后使用如下命令查看该文件:
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
使用qtsqlite数据库
-qt-libpng
使用qtpng
-qt-libjpeg
使用qtjpeg
-qt-freetype
使用qtfreetype, freetype是一种字体格式
-qt-pcre
使用qtpcre
-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库,从而编译出可以在开发板上运行的可执行文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:17 天
连续签到:1 天
2015-4-28 22:29:18 显示全部楼层
相当好的教程,很详细~ 谢谢
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2015-4-29 10:01:18 显示全部楼层
很详细 学习了 谢谢楼主
回复 支持 反对

使用道具 举报

尚未签到

2015-5-15 14:44:54 显示全部楼层
恰好公司有e9的板子,可以试试,练手了。。
回复 支持 反对

使用道具 举报

累计签到:23 天
连续签到:1 天
2015-6-6 19:53:44 显示全部楼层
楼主,如果是tiny6410的板子,我该怎么改qmake.conf
回复 支持 反对

使用道具 举报

累计签到:32 天
连续签到:1 天
2015-6-8 13:33:52 显示全部楼层
我用的时TI的AM335x,BBB板,该如何修改呀,尝试了几次configure失败
回复 支持 反对

使用道具 举报

累计签到:23 天
连续签到:1 天
2015-8-14 09:19:49 显示全部楼层
必须收藏                                
回复 支持 反对

使用道具 举报

累计签到:15 天
连续签到:1 天
2015-8-19 11:34:00 显示全部楼层
如果要移植到am335x的板子上,qtbase/mkspecs/devices/l里应该改哪个文件
回复 支持 反对

使用道具 举报

累计签到:8 天
连续签到:1 天
2015-12-6 18:26:21 显示全部楼层
按教程编译了好几次了,运行程序的时候都出现
This application failed to start because it could not find or load the Qt platform plugin "eglfs".

Reinstalling the application may fix this problem.
Aborted

什么原因???
回复 支持 反对

使用道具 举报

累计签到:13 天
连续签到:1 天
2016-1-28 16:25:40 显示全部楼层
5.4 移植时候 tslib不需要了吗? 我按照做法总是不成功  ./configure 就会有很多关于mouse的错误出来 make也不能通过
回复 支持 反对

使用道具 举报

尚未签到

2016-2-24 16:17:14 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

累计签到:1 天
连续签到:1 天
2016-3-4 16:23:35 显示全部楼层
班主在吗,编译每次都是出错,换了版本也没用,能发一份给我吗,谢谢了,291638774@qq.com
回复 支持 反对

使用道具 举报

累计签到:17 天
连续签到:1 天
2016-4-2 07:48:55 显示全部楼层
求问,这一步最后sudo make install 怎么确定有没有安装成功呢?
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-5-3 16:35:29 显示全部楼层
请问楼主成功移植过么?
为何我每次都是失败的呢?
回复 支持 反对

使用道具 举报

累计签到:4 天
连续签到:1 天
2016-5-10 09:16:03 显示全部楼层
感谢楼主的详细教程!谢谢
回复 支持 反对

使用道具 举报

尚未签到

2016-7-14 15:52:10 显示全部楼层
楼主你好!  请问qmake.conf文件中EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_imx6.cpp这句话是什么意思?
回复 支持 反对

使用道具 举报

累计签到:8 天
连续签到:1 天
2016-7-26 14:00:10 显示全部楼层
mui 发表于 2015-12-6 18:26
按教程编译了好几次了,运行程序的时候都出现
This application failed to start because it could not fin ...

我也遇到这个问题,你解决了吗?
回复 支持 反对

使用道具 举报

累计签到:8 天
连续签到:1 天
2016-7-26 14:02:03 显示全部楼层
mui 发表于 2015-12-6 18:26
按教程编译了好几次了,运行程序的时候都出现
This application failed to start because it could not fin ...

我也遇到这个问题,你解决了吗?
回复 支持 反对

使用道具 举报

累计签到:20 天
连续签到:1 天
2017-1-10 13:42:20 显示全部楼层
学习了,感谢版主共享啊
回复 支持 反对

使用道具 举报

尚未签到

2017-1-10 14:38:51 显示全部楼层
qt562,am335x和imx6的gpu都已搞定......
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了