Qt程序移植到ARM

 
  


          公司之前做了个项目是基于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的版本看是否安装正确了。

 


你可能感兴趣的:(Qt程序移植到ARM)