QT4.8.5在Cortex-A8上移植
这个移植本来前几月就移植成功了,一直没有机会来写一篇总结文档,网上的文档有很多,也比较杂,有些关键点没有说清楚。今天我又来重新做一遍,算是一个技术文档总结。
硬件:Pcduino(Cortex-a8, 1GHZ);
软件:Linux linaro-developer 3.4.29+;
编译环境:Ubuntu12.04 (32位),交叉编译器arm-linux-gnueabihf-g++。
QT版本:qt-everywhere-opensource-src-4.8.5,QT的版本比较混乱,本文不能保证其他版本的QT可以正确编译,所以请确保下载的就是这个版本的QT源码。
本身linaro这个ubuntu的Core,如果安装上桌面就可以用apt-get下载QT。但是这个模式我想有些占用资源,启动的速度也比较慢。所以我就想用QT的qws模式直接写在framebuffer上,而不去用桌面的X server图形服务器的接口。
第一步交叉编译QT源码:解压QT源码,在如下路径中修改用哪个版本的交叉编译器。
# Vim qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++/qmake.conf
修改内容如下:
这是指定交叉编译器的名字,请确保你的编译内核所用的编译器和这个编译器是同一个编译器,有时候编译器版本几种,统一用同一个版本比较好,否则问题莫名其妙。下面设置编译选项.
root@ /qt-everywhere-opensource-src-4.8.5# ./configure -prefix /newQt4.8.5 -embedded arm -host-little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-g++ -no-pch -no-opengl
这是在我的机子上测试过的QT配置选项,我不能保证在其他的机子上可以成功编译,应为每台机子安装的库文件不同,但是把错误编译的提示说明,搜索一下,这些问题都可以解决。
之和根据提示。注意./configure -prefix /newQt4.8.5中 这个/newQt4.8.5,这个的意思是把编译好的QT库文件安装到/newQt4.8.5这个文件夹,这个文件夹根据自己的情况自己指定。
Which edition of Qt do you want to use ?
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.
root@ /qt-everywhere-opensource-src-4.8.5# o
This is the Qt for Embedded Linux Open Source Edition.
You are licensed to use this software under the terms of
the Lesser GNU General Public License (LGPL) versions 2.1.
You are also licensed to use this software under the terms of
the GNU General Public License (GPL) versions 3.
Type '3' to view the GNU General Public License version 3.
Type 'L' to view the Lesser GNU General Public License version 2.1.
Type 'yes' to accept this license offer.
Type 'no' to decline this license offer.
Do you accept the terms of either license?
Root@/qt-everywhere-opensource-src-4.8.5# yes
如果不出现错误提示。
Root@/qt-everywhere-opensource-src-4.8.5# make
如果不出现错误提示。
Root@/qt-everywhere-opensource-src-4.8.5# make install
那么这个编译好的QT库文件将安装到/newQt4.8.5文件夹中。
最后/newQt4.8.5中有如下文件夹:
这就说明安装和编译成功了。
接下来要把这些编译好的库文件复制到目标板中。这里可以只复制lib中的文件和translations中的文件,目前的ARM板的空间也挺大的,所以我就把这几个文件全部都复制了。
接下来要设置目标板上的文件,确保QT的可执行程序可以正确的找到QT库文件。
export QTDIR=/newQt4.8.5
export QPEDIR=/newQt4.8.5
export LD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts/
export QWS_SIZE=720x480
#export QWS_DISPLAY="LinuxFb:mmWidth80:mmHeight120:0"
export QWS_DISPLAY="LinuxFB:/dev/fb0"
export QT_PLUGIN_PATH=$QTDIR/plugins
export PATH=$QTDIR/bin:$PATH
以上的在ARM系统中的/etc/profile的文件中,添加到最后面即可。
下面还要在PC机的QT Creator上设置把本次编译好的交叉编译工具添加进去。这样在PC端才可以交叉编译出ARM系统可以执行的代码。其实用Linux linaro的系统可以很容易的
Apt-get到ARM版本的QT编译器,也可以在ARM下直接编译代码,但是我尝试过,编译速度比较慢,尤其比较大的程序。本身QT编译代码就比较慢,以后快些的ARM处理器应该会好些。
首先在PC的QT Creator上新建一个QT项目,单击“项目”按钮
我用的QT Creator 2.4.1基于QT 4.8.0.如果QT Creator版本和我不一样可能设置界面更我不一样。不过应该有设置的地方,自己寻找。
在“构建设置“对话框下, Qt版本 后面有个管理设置,单击打开。单击添加按钮,如图下所示
在添加对话框里面选择编译好的Qmake工具,比如我的工具就在/newQt4.8.5/bin/qmake,这里,这是前面编译QT库得到的工具。但是按确定我的机器之后会出现symlink错误的提示,这个编译工具也不能使用。
我们这里做如下修改:
这里删除default这个软连接,重新再建一个软连接。这是在重新添加以下这个Qmake工具,会发现下图所示,没有了红色感叹号。
虽然还是有黄色感叹号,但是这样的话,这个工具链是可以使用了。至此交叉编译工具链构建成功了。这里有好几个编译器,这个Qt 4.8.1编译器编译出来的程序可以再PC的平台上运行,是QT Creaor自带的。我们添加的Qt4.8.5这个编译器可以编译出ARM平台运行的代码,对同一个工程我们选择不同的编译器,就可以编译出不同硬件平台可以运行的程序,是不是很方便。所以QT的跨平台真的很好使。我用1.6GHZ 的双核PC的运行速度,运行模式匹配算法,比我的1GHZ 单核ARM运行速度快2.5倍左右,我想目前也有4核1.5GHZ的ARM了,应该和一般的PC机有的一拼了,有机会试试。
2014.4.24 by 潇齐