公司之前做了个项目是基于arm+linux的体系,想要在板子上运行c++的服务器程序,思前想后觉得Qt既对c++有非常好的兼容。又有非常之好的跨平台性将来移植到别的系统非常的方便,而且Qt提供的编辑工具QtCreator操作又很方便所以决定选用Qt作为开发平台。
想要在ARM上运行Qt的程序必须要先编译一个Qt的ARM版本才行,这里我采用Qt版本是:qt-everywhere-opensource-src-4.8.5,我采用的编译环境是x86的主机+ubuntu的系统,因为开发板用的是cotexA8所以我用的交叉编译环境是arm11交叉编译工具链。
交叉编译工具链的下载地址是:http://115.com/?ct=rar&pickcode=b33lpqa0qhm8i84xh
qt-everywhere-opensource-src-4.8.5的下载地址是:http://115.com/?ct=rar&pickcode=cmm4rf9l5g2m6dbrl
1.首先我们要做的是安装交叉编译工具链,这个工具链是一个压缩包,先把他解压,在目录arm-2013.05/arm-none-linux-gnueabi/bin下放着的就是交叉编译的工具链了:
ar as c++ g++ gcc ld nm objcopy objdump ranlib README.txt strip
其中gcc是c编译器,g++是c++的编译器。
2.解压Qt的压缩包,这是一个有Qt源码的文件夹在其中我们找到mkspecs/qws/linux-arm-g++/qmake.conf这个文件,这个文件中记录了编译Qt所用到的工具链的路径,我们需要修改这个路径,把它变成我们刚才安装的交叉编译工具链,需要改的是以下的几行:
#modifications to g++.conf
QMAKE_CC=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-gcc
QMAKE_CXX=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-g++
#modifications to linux.conf
QMAKE_AR=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP=/home/arm-linux/arm-2013.05/bin/arm-none-linux-gnueabi-strip
“=”后面的是你的交叉编译工具链安装的路径,相应的将它改过来。
3.我们再找到mkspecs/common/g++.conf这个文件,这个文件中记录了目标机的cpu体系。修改其相应的选项:
QMAKE_CFLAGS_RELEASE+= -O2 -march=armv7-a -mtune=cortex-a8 -mfloat-abi=softfp
这里的“-march=armv7-a”说明了目标机的cpu体系是armv7体系的cpu,“-mtune=cortex-a8”说明了目标机的cpu是cotex-A8。
4.万事具备了我们还需要配置Qt的选项:
在Linux终端执行:
./configure -static -prefix
/usr/local/qt-everywhere-opensource-src-4.8.5 -embedded arm -qt-sql-sqlite -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb -host-little-endian -no-cups-no-3dnow -nomake examples -nomake demos -nomake docs -xplatform/qws/linux-arm-g++
关于Qt的各个选项的意思我就不一一赘述了,我讲几个重要的选项,“-qt-sql-sqlite”是说要编译sqlite数据库的驱动。“-host-little-endi”是说目标机是小端格式的CPU “-static”说明要编译Qt的静态库版本,这个选项很重要,因为以后在编译Qt程序的时候会用到Qt的静态库来消除程序对动态链接库的依赖性。-prefix /usr/local/qt-everywhere-opensource-src-4.8.5是指明了Qt的安装目录。
5.开始编译,在qt-everywhere-opensource-src-4.8.5执行make操作,编译Qt可能需要一段时间。
6.安装Qt。在编译完成后接着执行make install 那么Qt就会被安装到你指定的目录下了。
你以为这样就可以使用了嘛,还不行,你必须导出Qt的环境变量才行。具体操作是在Linux终端下执行下面几句:
export ARMQTDIR=/usr/local/qt-everywhere-opensource-src-4.8.5
export PATH=$ARMQTDIR/bin:$PATH
export MANPATH=$ARMQTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$ARMQTDIR/lib:$LD_LIBRARY_PATH
export QMAKESPEC=/usr/local/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++
在这里/usr/local/qt-everywhere-opensource-src-4.8.5指定的是你Qt安装的路径。执行完以后你可以用qmake –v 来查看Qt的版本看是否安装正确了。