qt/embedded 2.3.10 移植
HOST主机 : Red Hat 9 完全安装
交叉编译器 : freescale提供的arm-926ejs-linux 版本 gcc-4.1.1-glibc-2.4-nptl-sf-1
需要用到的软件包 : tmake-1.13.tar.gz qt-x11-2.3.2.tar.gz qt-embedded-2.3.10-free.tar.gz
一. 安装与建立Qt 桌面运行环境
第一步,解压安装包并设置环境变量
tar –xzvf tmake-1.13.tar.gz
tar –xzvf qt-x11-2.3.2.tar.gz
tar –xzvf qt-embedded-2.3.10-free.tar.gz
mv qt-2.3.10 qt-2.3.10-host
export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10-host
环境变量的设置是非常重要的,它关系到能否正确的安装及编译这些安装包.
注意: 在以下安装中,make命令执行前先执行一下make clean命令.
第二步,编译Qt/Embedded
1. Build Qt2.3.2
cd $QT2DIR
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -no-xft
make
mkdir $QTEDIR/bin
cp bin/uic $QTEDIR/bin/
2. Build Qvfb
export TMAKEPATH=$TMAKEDIR/lib/linux-g++
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$TMAKEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/tools/qvfb
make clean
tmake -o Makefile qvfb.pro
make
mv qvfb $QTEDIR/bin/
这一步build qvfb 并建立了从Qt/Embedded 2.3.10 到Qt 2.3.2 的静态库的链接。其中qvfb 工具用来生成Virtual framebuffer,这是一个非常有用的工具,它可以模拟在开发板上的显示情况,如果在Virtual framebuffer 中运行没有问题的话,可以直接通过交叉编译在开发板上运行。
3. Build Qt/Embedded
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
make clean
./configure -no-xft -qvfb -depths 4,8,16,32 此时我选择的5
make
第三步,查看运行结果
如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo 来查看运行结果。
在Virtual framebuffer 上运行:
export QTDIR=$QTEDIR
export PATH=$QTEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
cd $QTEDIR/examples/launcher
qvfb -width 640 -height 480 &
sleep 10
./launcher -qws
二 Qt/E 的交叉编译
1. Build Qt/Embedded
tar –xzvf qt-embedded-2.3.10-free.tar.gz
mv qt-2.3.10 qt-2.3.10-target
export PATH=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin:$PATH
export TMAKEDIR=$PWD/tmake-1.13
export QT2DIR=$PWD/qt-2.3.2
export QTEDIR=$PWD/qt-2.3.10-target
cd $QTEDIR
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export QTDIR=$QTEDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
修改tmake配置文件及qt-embedded配置
vi $TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
将
TMAKE_CC = arm-linux-gcc
TMAKE_CXX = arm-linux-g++
TMAKE_LINK = arm-linux-gcc
TMAKE_LINK_SHLIB = arm-linux-gcc
TMAKE_AR = arm-linux-ar cqs
改为
TMAKE_CC = arm-926ejs-linux-gcc
TMAKE_CXX = arm-926ejs-linux-g++
TMAKE_LINK = arm-926ejs-linux-g++
TMAKE_LINK_SHLIB = arm-926ejs-linux-g++
TMAKE_AR = arm-926ejs-linux-ar cqs
vi $QTEDIR/configs/linux-arm-g++-shared
将
SYSCONF_CXX = arm-linux-g++
SYSCONF_CC = arm-linux-gcc
SYSCONF_LINK = arm-linux-gcc
SYSCONF_LINK_SHLIB = arm-linux-gcc
SYSCONF_AR = arm-linux-ar cqs
改为
SYSCONF_CXX = arm-926ejs-linux-g++
SYSCONF_CC = arm-926ejs-linux-gcc
SYSCONF_LINK = arm-926ejs-linux-g++
SYSCONF_LINK_SHLIB = arm-926ejs-linux-g++
SYSCONF_AR = arm-926ejs-linux-ar cqs
vi $QTEDIR/configs/linux-arm-g++-shared-debug
vi $QTEDIR/configs/linux-arm-g++-static
vi $QTEDIR/configs/linux-arm-g++-static-debug
这三个文件修改的地方同$QTEDIR/configs/linux-arm-g++-shared相同
make clean
./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
make
/**********************************************************************************************************************/
出现错误:
error: ‘QWSInputMethod’ has not been declared
修改方法:
cd $QTDIR/src/kernel
vim qwindowsystem_qws.h
在前面增加以下两行
class QWSInputMethod;
class QWSGestureMethod;
/**********************************************************************************************************************/
出现错误:
qvaluestack.h:57: 错误:不能从 ‘QValueListIterator<QString>’ 转换到 ‘const char*’,为实参 ‘1’(属于 ‘int remove(const char*)’)
修改方法:
vim $QTDIR/include/qvaluestack.h
将remove( this->fromLast() );改为this->remove( this->fromLast() );
/**********************************************************************************************************************/
这两个错误是由于编译器的版本太高导致的
交叉编译成功!! 哈哈
三 在ARM上运行
1. 编译在arm上运行程序时需要的环境变量
export TMAKEDIR=/work/tmake-1.13
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export PATH=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin:$PATH
export QTEDIR=/work/qt-2.3.10-target
export QTDIR=$QTEDIR
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caballero2002/archive/2008/03/07/2155534.aspx