您的位置:首页 > 编程语言 > Qt开发

qt/embedded 2.3.10 移植

2010-01-10 15:14 351 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: