我的环境:
主机:redhat 5
主机编译器:gcc 4.1.1
交叉编译器:arm-linu-gcc 4.1.1
工具软件:
qt-embedded-linux-opensource-src-4.5.0.tar.bz2
qt-x11-opensource-src-4.5.0.tar.bz2
平时程序都是在PC上完成的,所以我们需要先安装X11版的QT来获得qvfb这工具,嵌入式的开发有了qvfb,就中以不需要实际的开发板,可以开发QT应用程序,至于开发驱动.那有开发板.
/usr/local/Trolltech/Qt-4.5.0/demos/ //是pc的qt程序,不是在qvfb里显示.
/usr/local/Trolltech/QtEmbedded-4.5.2-x86//demos/ //是x86版的qt程序,是在qvfb里显示.
/usr/local/Trolltech/QtEmbedded-4.5.2-arm//demos/ //是arm版的qt程序,是在板子里显示.
第一步:解压文件并命名
# tar -jxvf qt-x11-opensource-src-4.5.0.tar.bz2
# tar -jxvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2
# mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-x86 //构建用于pc上模拟开发的库,编译x86版QT应用程序.
# tar -jxvf qt-embedded-linux-opensource-src-4.5.0.tar.bz2
# mv qt-embedded-linux-opensource-src-4.5.0 qt-embedded-linux-opensource-src-4.5.0-arm ////构建QT交叉编译库,编译arm版QT应用程序.然后移到开发板上直接运行.
第二步:配置及编译安装
安装qt-x11-opensource-src-4.5.0
进入 qt-x11-opensource-src-4.5.0目录分别执行:
# ./configure -qvfb //这记得把qvfb 配置好,即可直接安装qvfb工具.
# make
# make install
三四个小时安装完后,这地自动生成 /usr/local/Trolltech目录,这是qt-x11-opensource-src-4.5.1安装后所在的目录.qt-x11-opensource-src-4.5.0原目录已编译,放着以后中备用.
下面接着安装qvfb工具:
进入qt-x11-opensource-src-4.5.0/toolS/qvfb 目录进行编订安装.
# make
# make install //这样qvfb就被安装到/usr/local/Trolltech/qt-4.5.0/bin目录下了。
make install完成后 //如能运行qvfb,就不用CP
#cp tools/qvfb/qvfb* /usr/local/Trolltech/Qt-4.5.1/bin
或者:也同样得到上面效果.
#cd /tools/qvfb
#make --会在qt-x11-opensource-src-4.5.0/bin下生成qvfb,我们将它copy至/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin下
#cp ../..bin/qvfb /usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin
等于(或者)
将/usr/local/qt/qt-x11-opensource-src-4.5.0/tools/qvfb目录下的qvfb相关文件拷贝到/usr/local/Trolltech/Qt-4.5.0/bin目录下,
#cp /usr/local/qt/qt-x11-opensource-src-4.5.0/tools/qvfb/ /usr/local/Trolltech/Qt-4.5.1/bin3
在运行qvfb时,记到/usr/local/Trolltech/Qt-4.5.0/bin/qvfb 目录 (是我另一台虚拟机的系统。可能之前没编译qvfb,先做个笔记。必须到这目录才能运行,郁闷)
运行:
#./qvfb
解决上面方法:
在/root/local/ qt-x11-opensource-src-4.5.3/tools/qvfb/目录中执行
#make 编译好qvfb可执行文件会在/root/local/qt-x11-opensource-src-4.5.3/bin目录下。
然后把/root/local/qt-x11-opensource-src-4.5.3/bin目录下这个qvfb可执行文件复制到qt-x11安装目录下,即/root/local/Trolltech /qt--4.5.3/bin中 .
安装qt-embedded-linux-opensource-src-4.5.0-x86
进入qt-embedded-linux-opensource-src-4.5.0-x86目录
# ./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.0-x86 -embedded x86 -qvfb -graphicssystem raster //这记得把qvfb 配置好,即可直接安装qvfb工具.
# make
# make install
//qt-x11-opensource-src-4.5.1-x86就编译好了。
运行前必须运行脚本,脚本是在你要编译x86版QT应用程序前要先执行的。它指定了一些引用。(脚本环境变量在后面有说明)
下面测试qvfb (先启动脚本)
输入:#qvfb & //启动qvfb
#/usr/local/Trolltech/Qt-x86/demos/chip/
#./chip -qws //启动
成功启动显示.
安装tslib
安装qt-embedded-linux-opensource-src-4.5.0-arm
//安装这个是最为关键的,因为编译好后要把lib拷贝到板子上
对于触摸屏幕,我使用的是tslib1.4.tar.gz
交叉编译tslib过程如下:
arm-9tdmi-linux-gnu交叉编译变量已在 /etc/bashc 里添加.
#tar -zxvf tslib1.4.tar.gz
#./autogen.sh //生成configure
#./configure --prefix=/usr/local/tslib/ --host=arm-9tdmi-linux-gnu ac_cv_func_malloc_0_nonnull=yes (可以先生成个cache文件)
#make
#make install
接着安装qt-arm
进入qt-embedded-linux-opensource-src-4.5.0-arm目录
#./configure --prefix=/usr/local/Trolltech/QtEmbedded-4.5.0-arm -arch arm -embedded arm -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib //因为开发版空间有限,只要完成需要的功能就可以了,可以直接裁剪. configure -help 查看.
(./configure -prefix /home/jimmy/opt/run/qt-arm -release -shared -fast -pch -no-qt3support -qt-sql-sqlite -no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype -no-openssl -nomake examples -nomake demos -nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm -no-xinerama -no-xshape -no-separate-debug-info -xplatform qws/linux-arm-g++ -embedded arm -depths 16 -no-qvfb -qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -qt-kbd-usb -confirm-license )
//后面一大堆参数,其实就是为了尽量减少库的大小,而剪裁一些不需要的功能
今天出现:
The tslib functionality test failed!
You might need to modify the include and library search paths by editing
QMAKE_INCDIR and QMAKE_LIBDIR in
/user/qt-embedded-linux-opensource-src-4.5.0-arm/mkspecs/qws/linux-arm-g++.
然后把arm/mkspecs/qws/linux-arm-g++/qmake.conf 里的linux-arm-g++ 改成交叉编译器 arm-9tdmi-linux-gnu 问题解决。
#make
#make install
//qt-x11-opensource-src-4.5.1-arm就编译好了。
运行前必须运行脚本,脚本是在你要编译arm版QT应用程序前要先执行的。它指定了一些引用。(脚本环境变量在后面有说明)
以上都安装完后.接下来设置环境变量:
分别三个环境变量脚本文件:(我把它们放到一个目录管理)
setenvQtpc.sh (PC X11 版QT); setenvQtx86.sh (X86 版QT); setenvQtarm.sh (arm 版QT)
(1)qt-x11:
vi setenvQtpc.sh
添加如下内容:
PATH=/usr/local/Trolltech/Qt-4.5.0/bin:$PATH
QTDIR=/usr/local/Trolltech/Qt-4.5.0
QTDEDIR=$QTDIR
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH
(2)qt-embedded-x86:
vi setenvQtx86.sh
添加如下内容:
PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-x86/bin:$PATH
QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-x86
QTDEDIR=$QTDIR
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH
(3)qt-embedded-arm:
vi setenvQtarm.sh
添加如下内容:
PATH=/usr/local/Trolltech/QtEmbedded-4.5.0-arm/bin:$PATH
QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.0-arm
QTDEDIR=$QTDIR
MANPATH=$QTDIR/man:$MANPATH
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export PATH QTDIR MANPATH LD_LIBRARY_PATH
我们在运行的时候分别运行对应的脚本即可,比如我们要用qt-arm:
#cd /user/shdir
#source setenvQtarm.sh
然后就可以用qmake designer等工具了.
注:在端口执行有效,如果运行source setenv 再打开另端口.那样就会出错.
在qt-x86端口运行setenv脚本,在本端口再进行编译QT程序.
运行x86程序必须先运行qt-x11/qt-x86 的setenv脚本,然后就可运行qvfb工具.再另一个端口打应用程序. ./qthello -qws 就样就可以在qvfb中显示.(运行qvfb,必须运行脚本)
接下来测试(现在例子)--也可以自己用QT写自己程序:): //以下步骤是同一个端口
#cd /user/shdir
#source setenvQtx86.sh
#qvfb //启动qvfb
#cd /usr/local/Trolltech/QtEmbedded-4.5.0-x86/demos/books
#./books -qws //这样可以在QVFB里显示 //可另一个端口
注:
如果编译QT程序,记得先运行相应脚本,即可用相应的QT平台编译QT程序。
如:编译PC QT4程序,因为本子是qt3,所以必须先运行脚本。
#source setenvQtpc.sh
#desiger/qmake //同一个端口,这样,它们是用QT4编译程序。
如:编译x86 QT4程序,必须先运行脚本。
#source setenvQtx86.sh
#qmake //同一个端口,这样,它们是用X86版QT4编译程序,可以QVFB里显示.
如:编译arm QT4程序,必须先运行脚本。
#source setenvQtarm.sh
#qmake //同一个端口,这样,它们是用arm版QT4编译程序,可以在板子里显示。
以上是本人实践通过笔记。呵呵。从不了解到了解,让自己更理解,同时谢谢网上的高手献的文章。