[分享]在i.MX 6Solo上编译并运行QT5应用

2020-02-11 09:57发布

在论坛里看到很多讨论i.MX6Q的问题,感觉大家没人关系它的小弟i.MX 6Solo,今天就把自己在i.MX 6Solo上编译QT5的经验分享出来以供有需要的坛友参考。
我用的开发版是RIoTBoard,除了i.MX 6Solo外,板子上还有1G DDR3内存和4G eMMC,外设方便支持千兆网卡、HDMI1.4、microSD、LVDS、JTAG等,更多资料可以看一下element14上的介绍:
http://www.element14.com/community/docs/DOC-65474
这个板子的eMMC里面自带了Android,不过我并没有用,我在microSD卡里面刷入了Debian,然后修改启动开关的位置从microSD启动,这样就可以运行其它系统了。官方也提供了对Ubuntu的功能,不过版本很就:11.04。
此次编译的程序是开源飞控TauLabs的地面站,用QT写的,其最新版本要求QT5,而Debian 7.5上的QT只有4.8,这里说一下如果你在软件源里面启用SID,是可以通过apt-get很方便地安装QT5的,但是要把它所依赖的其它库都升级到SID里面的版本,可能会导致与系统里面其它应用之间的兼容性问题,因此不建议这样做。所以我选择了从源码编译QT。
首先要下载QT的代码,我选择了一个比较近的镜像下载的:
  1. wget http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.3/5.3.1/single/qt-everywhere-opensource-src-5.3.1.tar.gz
复制代码
然后先别急的解压,先对照QT的文档检查一下是不是依赖包都安装了:
http://qt-project.org/doc/qt-5/linux-requirements.html
比如我的板子上缺乏XCB和XRender,可以用如下命令安装:
  1. sudo apt-get install libxcb-* libX11-xcb1 libX11-xcb-dev libxrender-dev libxrender1
复制代码
如果你的应用程序里面用到了OpenGL、多媒体支持或者WebKit,那么建议仔细检查一下它们各有的依赖项。
接下来就可以陪着并编译了:

  1. tar -xzvf qt-everywhere-opensource-src-5.3.1.tar.gz
  2. cd <source directory>
  3. ./configure <options>
复制代码
QT的configure脚本功能非常复杂,建议看一下这个文档,根据需要自己添加参数:
http://qt-project.org/doc/qt-5/configure-options.html
我这里没有对不需要的模块进行删减,只是指定了prefix就编译了,实践证明这需要非常长的编译时间。
configure脚本运行后会问一些问题:

  1. ./configure -prefix /opt/Qt-5.3.1
  2. + cd qtbase
  3. + ~/qt-src-5.3.1/qtbase/configure -top-level -prefix /opt/Qt-5.3.1
  4. Which edition of Qt do you want to use ?

  5. Type 'c' if you want to use the Commercial Edition.
  6. Type 'o' if you want to use the Open Source Edition.

  7. c “c选择开源版本,否则要求提供一个license文件”

  8. This is the Qt Technology Preview Edition.

  9. You are licensed to use this software under the terms of
  10. the TECHNOLOGY PREVIEW LICENSE AGREEMENT

  11. Type '?' to read the Preview License.
  12. Type 'yes' to accept this license offer.
  13. Type 'no' to decline this license offer.

  14. Do you accept the terms of the license? yes “输入yes同意许可协议”

  15. Creating qmake...
复制代码
除了检查基本的系统环境外,configure脚本还会编译qmake用于QT的编译,最后它会给出一个编译选项,类似这样:

  1. Build parts ............ libs tools examples
  2.   Mode ................... release
  3.   Using C++11 ............ yes
  4.   Using PCH .............. yes
  5.   Target compiler supports:
  6.     iWMMXt/Neon .......... no/auto

  7. Qt modules and options:
  8.   Qt D-Bus ............... no
  9.   Qt Concurrent .......... yes
  10.   Qt GUI ................. yes
  11.   Qt Widgets ............. yes
  12.   Large File ............. yes
  13.   QML debugging .......... yes
  14.   Use system proxies ..... no
复制代码
然后就可以开始编译了:
  1. make
复制代码
这会花很长很长很长很长很长很长很长很长很长的时间的,我由于中间遇到依赖库的头文件缺失的问题而终止编译无法统计具体时间,但这总共花了3个晚上外加一个白天才完成编译,尤其是在i.MX 6Solo这样的单核心CPU上,如果你用i.MX 6Q,那么可以用
  1. make -j4
复制代码来4核火力全开以加速编译。
当然要是在PC上交叉编译的话速度会很快,我没选择交叉编译的原因是为了避免依赖库和一些交叉编译特有的缺陷(如浮点数处理等)。
等编译完成后,可以简单地把新编译好地QT安装到指定地位置:
  1. sudo make install
复制代码
然后修改环境变量
  1. export PATH=/opt/Qt-5.3.1/bin:$PATH
复制代码
现在就可以检查一下安装的结果了:

  1. $ qmake --version
  2. QMake version 3.0
  3. Using Qt version 5.3.1 in /opt/Qt-5.3.1/lib
复制代码
已经能看到是最新的QT 5.3.1 了,至此QT部分搞定!
然后为了更全面地测试一下,当然要编译一个应用程序试试,这里我用了开源飞控TauLabs的地面站,关于它可以看看这里(http://taulabs.org)。
还是下载源码,可以用git搞定:
  1. git clone https://github.com/TauLabs/TauLabs.git
复制代码
然后就可以开始编译了,几乎不要什么配置:

  1. cd TauLabs
  2. make gcs
复制代码
TauLabs地面站大概需要两个多小时地时间完成编译,相比QT还是算快的了
最后就是打开地面站,看看是不是有什么问题了,这里贴出几张截图(X11转发后在电脑上截的)
firmware.png (148.98 KB, 下载次数: 0) 下载附件 固件更新页面 2014-9-14 09:55 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。