Qt交叉編譯工具建立 中篇
繼續(xù)上面的內(nèi)容繼續(xù)講 Qt交叉編譯工具建立 上篇 ,主要介紹了Qt/Embedded 的交叉編譯,建立本機(jī)Qtopia 虛擬平臺這兩個(gè)方面介紹的!
一、Qt/Embedded的交叉編譯
要將我們寫好的程序發(fā)布到開發(fā)板上,我們需要對Qt/Embedded 重新編譯,與前面在宿主機(jī)上編譯類似,步驟如下:
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 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
- make clean
- ./configure -xplatform linux-arm-g++ -no-xft -no-qvfb -depths 4,8,16,32
- make
這步完成后,我們會在/$QTEDIR/lib/目錄下面看到libqte.so libqte.so.2 libqte.so.2.3 libqte.so.2.3.10 這四個(gè)文件,我們可以使用file 命令來查看這個(gè)庫文件是否是我們需要的在開發(fā)板上跑的庫。
- file libqte.so.2.3.10
- libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM), stripped
有了這個(gè)庫以后我們就可以把它拷貝到我們的開發(fā)板中相應(yīng)的庫目錄下面,這里我們選擇了開發(fā)板上的/usr/lib 目錄,將/$QTEDIR/lib/下的libqte.so*復(fù)制到/usr/lib 目錄下。
首先要建立宿主機(jī)和開發(fā)板的通訊,假設(shè)本機(jī)的ip 地址為192.168.0.56 并且/root/share 為共享文件夾。
- cp –arf /$QTEDIR/lib/libqte.so* /root/share
- 啟動minicom
- mount –t nfs –o nolock 192.168.0.56:/root/share /mnt/nfs將文件復(fù)制到開發(fā)板上
- cp –arf /mnt/nfs/libqte.so* /usr/lib
2. 修改tmake 配置文件
- vi $ TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf
- 將其中“TMAKE_LINK= arm-linux-gcc”
- “TMAKE_LINK_SHLIB= arm-linux-gcc”
- 修改為:“TMAKE_LINK= arm-linux-g++”
- “TMAKE_LINK_SHLIB= arm-linux-g++”
3.生成可執(zhí)行文件
這里我們采用了Qt/Embedded自帶的一個(gè)demo,它在/$QTEDIR/examples/progressbar目錄下,這個(gè)目錄包括下面幾個(gè)文件: main.cpp、Makefile.in 、progressbar.h 、
Makefile、progressbar.cpp、progressbar.pro,如果已經(jīng)有了progressbar 的執(zhí)行文件,可以使用make clean刪除。
- progen –t app.t –o progressbar.pro
- echo $TMAKEPATH
查看返回的結(jié)果的結(jié)尾字符是否是“……/qws/linux-arm-g++”,如果不是的話需要在命令行中重新設(shè)置TMAKEPATH
export TMAKEPATH=/tmake 的安裝路徑(如$TMAKEDIR)/lib/qws/linux-arm-g++
此外還要使QTDIR指向Qt/Embedded 的安裝路徑,如:
export QTDIR=$QTEDIR 或者直接指定路徑
- export QTDIR=……/qt-2.3.10-target
完成了上面的環(huán)境變量的設(shè)置,并用echo 命令檢查無誤以后,就可以使用tmake 工具來生成我們需要的makefile 文件,在命令行中輸入如下命令:
- tmake –o makefile progressbar.pro
- make
如果沒出現(xiàn)錯(cuò)誤的話就可以在當(dāng)前目錄下找到progressbar這個(gè)可執(zhí)行文件,它就是在我們開發(fā)板上的相應(yīng)目錄中運(yùn)行“./progressbar -qws”就可以運(yùn)行程序了。
注: (1)如果執(zhí)行命令
- [/mnt/nfs]./progressbar -qws
- ./progressbar: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or direy
我的解決辦法是從編譯器目錄下查找,并拷貝到開發(fā)板/usr/lib/中
即拷貝/usr/local/arm/3.4.1/arm-linux/lib/libstdc++.so* 到開發(fā)板/usr/lib/中
(2).[/mnt/nfs]./progressbar –qws
- /progressbar: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such fy
方法同上
二、建立本機(jī)Qtopia 虛擬平臺
軟件:Redhat Linux9.0 for PC + minicom + Embeded Linux for 2410
- tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.bz2 qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz
將本次實(shí)驗(yàn)所需的四個(gè)文件拷貝到/root/qtopia 目錄下,我們以下的實(shí)驗(yàn)都是在這個(gè)目錄下進(jìn)行的。
宿主機(jī)上建立虛擬的Qtopia 環(huán)境需要以下幾個(gè)步驟:
1. 解壓縮安裝文件:
- tar jxvf qtopia-free-source-2.1.1.tar.bz2
- mv qtopia-2.1.1 qtopia-2.1.1-target
- tar xzf tmake-1.13.tar.gz
- tar xzf qt-x11-2.3.2.tar.gz
- tar xzf qt-embedded-2.3.10-free.tar.gz
- mv qt-2.3.10 qt-2.3.10-target
- export QPEDIR=$PWD/qtopia-2.1.1-target
- export TMAKEDIR=$PWD/tmake-1.13
- export QT2DIR=$PWD/qt-2.3.2
- export QTEDIR=$PWD/qt-2.3.10-target
2. Build Qt/X11:
- 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
- ./configure -no-xft
- make
- mkdir $QTEDIR/bin
- cp bin/uic $QTEDIR/bin/
3. Build Qvfb:
- export TMAKEPATH=$TMAKEDIR/lib/linux-g++
- export QTDIR=$QT2DIR
- export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin
- export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
- cd $QTEDIR/tools/qvfb
- tmake -o Makefile qvfb.pro
- make
- mv qvfb $QTEDIR/bin/
4.Build libqte:
- 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
- cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/
- ./configure -system-jpeg -no-xft -qconfig qpe -qvfb -depths 4,8,16,32
- make sub-src
5.Build Qtopia:
- cd $QPEDIR
- export QTDIR=$QTEDIR
- export PATH=$QPEDIR/bin:$PATH
- export
- LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
- ./configure
- make
和前面編譯Qt/Embedded 的基本步驟一樣,還可以參考“./configure --help”,來進(jìn)行選擇。為了保證qvfb 能夠正確顯示qtopia 的結(jié)果,我們必須保證環(huán)境變量設(shè)置正確,我們可以通過“env”命令來檢查下面的環(huán)境變量,也可以用下面的方法來檢查。
- echo $QPEDIR
- /root/qtopia/qtopia-free-2.1.1/
- echo $QTDIR
- /root/qtopia/qt-2.3.10
- echo $LD_LIBRARY_PATH
- /root/qtopia/qtopia-free-2.1.1/lib:/root/qtopia/qt-2.3.10/lib
- echo $PATH
- /root/qtopia/qt-2.3.10/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local
- /sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
出現(xiàn)上面的結(jié)果就可以正常的顯示Virtual framebuffer,我們可以通過下面的命令在Virtual framebuffer 中實(shí)現(xiàn)Qtopia。
- cd $QPEDIR/bin
- qvfb &
- sleep 10
- ./qpe.sh
小結(jié):關(guān)于Qt交叉編譯工具建立的內(nèi)容介紹完了,想要深入了解的話,請繼續(xù)關(guān)注 Qt交叉編譯工具建立 下篇 ,***希望本文對你有所幫助!