HOST操作系统:Linux-2.6.15-1.2054_FC5-GCC版本-4.1.0
TARGET:mx31开发板(freescale-ARM11平台)
交叉编译工具链:arm-none-linux-gnueabi(mx31开发板所提供) gcc-4.1.1
Qt/E版本:qt-embedded-free-3.3.8
(ps:HOST上已经编译过qt-embedded-free-3.3.8---gcc 4.1.0)
下面的过程是在HOST-PC上已经正确的安装了qt-embedded-free-3.3.8上进行的:
交叉编译的详细步骤:
第一步:下载qt-embedded-free-3.3.8并解压缩到自定义的目录下。
我的目录是
tar jxvf qt-embedded-free-3.3.8.tar.bz2
自动生成 /root/qt/qt-embedded-free-3.3.8
(注意:记得将你在HOST编译好的QT/E的目录下的bin文件里的moc和uic二进制文件copy到我们交叉编译的目录下的bin文件夹里-就是/root/qt/qt-embedded-free-3.3.8)
第二步:安装交叉编译工具链
这一步取决于你所使用的交叉编译工具链,我的是arm-none-linux-gnueabi(freescale的mx31开发板所提供)
安装完成后bin的目录是:
/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-6/arm-none-linux-gnueabi/bin
第三步:配置qmake(即指定交叉编译工具)
在mkspecs/qws/下建立arm-none-linux-gnueabi目录
cd /root/qt/qt-embedded-free-3.3.8
cd mkspecs/qws/
mkdir arm-none-linux-gnueabi
把mkspecs/qws/linux-arm-g++下的qmake.conf和qplatformdefs.h复制到mkspecs/qws/arm-none-linux-gnueabi目录下
然后修改qmake.conf文件,把文件里面的编译器指定为arm-none-linux-gnueabi
用arm-none-linux-gnueabi-gcc和arm-none-linux-gnueabi-g++替代以下的arm-linux-gcc和arm-linux-g++
QMAKE_CC = arm-linux-gcc
QMAKE_CXX = arm-linux-g++
QMAKE_LINK = arm-linux-g++
QMAKE_LINK_SHLIB = arm-linux-g++
第四步:环境变量的设置
export QTEDIR=/root/qt/qt-embedded-free-3.3.8
export QTDIR=$QTEDIR
export PATH=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-6/arm-none-linux-gnueabi/bin:$PATH
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
第五步:config
./configure -xplatform qws/arm-none-linux-gnueabi -no-cups -no-stl -no-qvfb -depths 4,8,16,32 -qt-gif -embedded arm -disable-sql
注意:在configure的时候会出现一个警告
WARNING: Failure to find: .moc/release-static-mt-emb-x86/allmoc.cpp
关于这个问题官方已经给出答案,引用如下
This is not a problem. It happens everytime Qt/embedded is configured.
所以,这个警告可以不预理会。
第六步:make 或者是 make sub-src
make/make sub-src
注意:make的时候由于对于qt3的交叉编译工具的gcc版本问题而导致提示如下错误:
../include/qstring.h: In member function 'ushort& QChar::unicode()':
../include/qstring.h:199: error: cannot bind packed field
'((QChar*)this)->QChar::ucs' to 'ushort&'
