系统平台:RedHat 9(不一定完全安装,但要装好编程开发工具,这项对于经常做linux应用程序开发的人肯定不会忽略,但X服务器及相关的库,我当时就没装,后来插入cd3补装上)
交叉编译环境用arm-linux-gcc3.4.1.tar.bz
qt-embedded-2.3.7.tar.gz (qte的库)
qt-x11-2.3.2.tar.gz (为了生成相应的qtdesigner和qvfb)
qtopia-free-1.7.0.tar.gz (qte的桌面环境程序,QPE就是QT PDA应用环境的简称)
tmake-1.11.tar.gz (编译器)
e2fsprogs-1.35.tar.gz (只使用其中的uuid的库)
放在用户登录目录下。
一、建立PC上的qt运行模拟环境
1解压
# cd ~
# mkdir x86-qtopia
# tar zxvf qt-x11-2.3.2.tar.gz
# mv qt-2.3.2 qt-x11
# cd x86-qtopia
# tar zxvf ../tmake-1.11.tar.gz
# tar zxvf ../qt-embedded-2.3.7.tar.gz
# tar zxvf ../qtopia-free-1.7.0.tar.gz
# tar zxvf ../e2fsprogs-1.35.tar.gz
# mv tmake-1.11 tmake
# mv qt-2.3.7/ qt
# mv qtopia-free-1.7.0 qtopia
# mv e2fsprogs-1.35 e2fsprogs
通过上面几步在用户目录中建立如下目录(-->表示内容分就是从后面的文件解压的,只不过重命名了)
~目录下有两个子目录qt-x11和x86-qtopia:
qt-x11 -->qt-x11-2.3.2.tar.gz
x86-qtopia目录下有以下子目录:
tmake -->tmake-1.11.tar.gz
qt -->qt-embedded-2.3.7.tar.gz
qtopia -->qtopia-free-1.7.0.tar.gz
e2fsprogs -->e2fsprogs-1.35.tar.gz
2编译qt-x11
接
下来还必须编译qt-x11,主要是为了编译生成其中的qtdesigner和qvfb。qvfb程序在系统中并未安装,需要我们自己编译。
qtdesigner是和qt库的版本是相关的,当我们使用PC机上和QTE版本不符的qtdesigner时,可能在PC机上的qt-x11能使用的控
件在QTE上并未实现,导致应用程序编译不成功。所以,我们使用2.3版本的QTE时,必须使用相同版本的qt-x11编译生成的qtdesigner和
qvfb。
# cd ~/qt-x11
# export QTDIR=$PWD
# echo yes | ./configure -static -no-xft -no-opengl -no-sm
# make -C src/moc
# cp src/moc/moc bin
# make -C src //我的机子配置是AMD1.74G,内存512M,只开了个虚拟机,这步耗时15分钟
# make -C tools/designer
# make -C tools/qvfb
# cp tools/qvfb/qvfb bin
# strip bin/uic bin/moc bin/designer bin/qvfb
# cp bin/* ../x86-qtopia/qt/bin -f
3 PC平台编译环境
编译之前做一下准备工作:打开一个控制台之后设置环境变量。
# cd ~/x86-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
3.1 编译QTE
# cd $QTDIR
# cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f
# (echo yes ; echo no) | ./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32
# make -C src clean
# make -C src //耗时起码10分钟
如果成功$QTDIR/lib目录下已经有了qt的库了
3.2 编译QTOPIA
# cd $QPEDIR/src
# ./configure
# make clean
# make //起码半小时
上面这步如果出现下面错误:
global1.cpp:39:23: uuid/uuid.h: No such file or directory
global1.cpp: In static member function `static QUuid Global::generateUuid()':
global1.cpp:188: `::uuid_generate' undeclared (first use here)
make[1]: *** [.obj/linux-generic-g++//global1.o] Error 1
make[1]: Leaving directory `home/dongjiajing/x86-qtopia/qtopia/src/libraries/qtopia1'
make: *** [libraries/qtopia1] Error 2
表示找不到uuid.h头文件无法编译通过。解决方法如下,进入~/x86-qtopia/e2fsprogs目录下,
#mkdir build
#cd build
#./configure
#make
这
步会在./build/lib下产生一些库文件,把./build/lib/uuid/libuuid.a拷到~/x86-qtopia/qtopia
/lib下,然后把~/x86-qtopia/e2fsprogs/lib/uuid整个目录(这个目录中含有uuid.h文件)拷到~/x86-
qtopia/qtopia/include下,然后返回到$QPEDIR/src中make即可通过。
如果上面都编译通过,则
# cd $QTDIR/bin
# ./qvfb &
#cd $QPEDIR/bin
# ./qpe &
后可以看到qtopia在帧缓冲中显示的桌面环境。这个运行效果跟实际在arm板上的效果是一样的。以后对arm板上qt GUI的开发可以先在这个模拟环境下验证。
二、建立arm板的qt实际库环境
以上就完成了在PC上建立arm板的qt模拟开发环境,下面是建立能在arm板上运行qt程序的板载环境。在~目录下建立arm-qtopia文件夹,这
个文件夹存放板上运行库和执行文件。这个文件夹内容跟x86-qtopia一样,只是板上qt环境要需要的qte和qtopia对应的库要重新编译
。编译前把上面的配置参数由-platform linux-generic-g++改为-platform linux-arm-g++ 。
以后需要实际在arm板上运行的qt执行程序时只要把编译器改为arm-linux-gcc,链接路径都改为arm-qtopia下的对应目录。写个脚本就能完成这个工作。
交叉编译环境用arm-linux-gcc3.4.1.tar.bz,编译时出现文件中变量未声明的错误,友善建议改用arm-linux-gcc3.3.2.tar.bz,应用程序的编译也用这个版本。
在编译qt-x11-2.3.2过程中若出现:
/usr/local/qt/include/qvaluestack.h:57:
错误:不能从 ‘QValueListIterator’ 转换到 ‘const char*’,为实参 ‘1’(属于
‘int remove(const char*)’)
打开$QTDIR/include/qvaluestack.h,将remove( this->fromLast() );改为this->remove( this->fromLast() );
阅读(1103) | 评论(0) | 转发(0) |