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-
下边逐项对这里使用的参数进行解释:
执行完成configure命令后,就生成了Makefile文件,此时就可以进行编译了。
4、编译和安装
生成了Makefile,一切都准备好了,现在就让电脑去工作吧。输入:
make -j5
然后你就可以休息了。这里的-j5参数是让编译过程分为5个线程进行,可以提高编译速度。分为几个线程可以遵循“CPU 核心数 +
1”的原则。例如:我的电脑是i5处理器,双核四线程,所以我这里分成5个线程进行。整个编译过程在我的电脑上需要大概40分钟。忙了这么长时间去喝杯咖啡犒劳一下自己吧。
编译完成后,执行:
sudo makeinstall
好了,祝贺你,到这里Qt库已经交叉编译完成了。
结 语
这一篇中我们做了Qt移植中最重要的一步工作,就是编译Qt,这样生成的库可以用来编译Qt程序,从而生成可以在开发板上运行的可执行文件。下一篇将在Qt
Creator中关联生成的Qt
ARM库,从而编译出可以在开发板上运行的可执行文件。
该文章原创于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] |
4、编译和安装
生成了Makefile,一切都准备好了,现在就让电脑去工作吧。输入:
make -j5
然后你就可以休息了。这里的-j5参数是让编译过程分为5个线程进行,可以提高编译速度。分为几个线程可以遵循“CPU 核心数 +
1”的原则。例如:我的电脑是i5处理器,双核四线程,所以我这里分成5个线程进行。整个编译过程在我的电脑上需要大概40分钟。忙了这么长时间去喝杯咖啡犒劳一下自己吧。
编译完成后,执行:
sudo makeinstall
好了,祝贺你,到这里Qt库已经交叉编译完成了。
结 语
这一篇中我们做了Qt移植中最重要的一步工作,就是编译Qt,这样生成的库可以用来编译Qt程序,从而生成可以在开发板上运行的可执行文件。下一篇将在Qt
Creator中关联生成的Qt
ARM库,从而编译出可以在开发板上运行的可执行文件。
相关文章推荐
- How-to: parsing XML with Qt
- Qt 多线程
- QT 多线程程序设计
- QT窗体背景色设置
- Qt练习之自定义时钟
- 我的Qt學習日記 DAY 2 Qt 開發環境
- PyQt4环境搭建与使用
- QT5入门之2 - HelloWorld
- 编译x11版本qt
- QT5入门之1 - QT下载与安装
- Qt使用问题总结
- 基于Qt的图像处理技术和算法
- 在QT中使用哈希表存储数据
- Qt arm嵌入式交叉编译环境搭建
- MQTT连接服务器发送和接收数据
- Windows下发布Qt程序
- log4qt使用示例
- Qt5.5.0 MinGW492_32 release静态版编译
- pyqt的基本组件
- [分享]Hi3520,Hi3515,HI3531上移植和运行QT4.8.6