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