深度解析 Qt 4.5.3 移植全過程
Qt 4.5.3 移植全過程是本文要介紹的內(nèi)容,在概述也提到了QT 4.5是開跨平臺GUI應(yīng)用程序的理想選擇,那么在本文主要是講開發(fā)環(huán)境,先來看本文。
1、安裝交叉編譯環(huán)境
(1)下載arm-linux-gcc-3.4.1.tar.bz2(建議用的這個(gè)版本的,有些低版本的交叉編譯工具在編譯時(shí)會出錯(cuò))
arm-linux-gcc-3.4.1.tar.bz2 的下載地址如下:
http://www.handhelds.org/download/projects/toolchain/arm-linux-gcc-3.4.1.tar.bz2
(2)解壓 arm-linux-gcc-3.4.1.tar.bz2
- #tar -jxvf arm-linux-gcc-3.4.1.tar.bz2
 
解壓過程需要一段時(shí)間,解壓后的文件形成了 usr/local/ 文件夾,進(jìn)入該文件夾,將arm文件夾拷貝到/usr/local/下
- # cd usr/local/
 - #cp -rv arm /usr/local/
 
現(xiàn)在交叉編譯程序集都在/usr/local/arm/3.4.1/bin下面了
(3)修改環(huán)境變量,把交叉編譯器的路徑加入到PATH。(有三種方法,這里只寫一種)
- # vi ~/.bashrc
 
在最后加上:
- export PATH=$PATH:/usr/local/arm/3.4.1/bin
 
(4)立即使新的環(huán)境變量生效,不用重啟電腦
- #source ~/.bashrc
 
(5)檢查是否將路徑加入到PATH:
- # echo $PATH
 
顯示的內(nèi)容中有/usr/local/arm/bin,說明已經(jīng)將交叉編譯器的路徑加入PATH。至此,交叉編譯環(huán)境安裝完成。
(6)測試是否安裝成功
- # arm-linux-gcc -v
 
上面的命令會顯示arm-linux-gcc信息和版本,這是我顯示的信息:
- Reading specs from /usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs
 - Configured with: /work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.3.2/gcc-3.4.1/configure --target=arm-linux --host=i686-host_pc-linux-gnu
 - --prefix=/usr/local/arm/3.4.1 --with-headers=/usr/local/arm/3.4.1/arm
 - -linux/include --with-local-prefix=/usr/local/arm/3.4.1/arm-linux --disable
 - -nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable- languages=c,c++ --enable-shared --enable-c99 --enable-long-long
 - Thread model: posix
 - gcc version 3.4.1
 
到這里就成功安裝好了交叉編譯環(huán)境
2、安裝qt-x11
進(jìn)入下載頁面:選擇Download Qt libraries 4.5 for Linux/X11(120 Mb)
- # aptitude install libxtst-dev
 - # tar -zxvf qt-x11-opensource-src-4.5.3.tar.gz
 - # cd qt-x11-opensource-src-4.5.3
 - # ./configure
 - # make
 - # make install
 
qt-x11 被安裝到此目錄下/usr/local/Trolltech/Qt-4.5.3
編譯qvfb:
- # cd qt-x11-opensource-src-4.5.3/tools/qvfb
 - # make
 
至此,qt-x11安裝完畢完畢
#p#
3、安裝qt-embedded
選擇支持arm的體系結(jié)構(gòu)
- # tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
 - # cd qt-embedded-linux-opensource-src-4.5.3
 - #./configure -embedded arm -xplatform qws/linux-arm-g++ -no-qt3support -qt-mouse-linuxtp(我自己的設(shè)置,你可以通過查看./configure -help來設(shè)置)
 - #make
 - #make install
 
qt-embeded 被安裝在這個(gè)目錄下/usr/local/Trolltech/QtEmbedded-4.5.3-arm 或者是/usr/local/Trolltech/QtEmbedded-4.5.3-generic
一般在/usr/local/Trolltech/QtEmbedded-4.5.3-arm
這里你可以新建一個(gè)set-env.sh文件
把下面復(fù)制到文件中
- export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm
 - export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH
 - exportLD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib:$LD_LIBRARY_PATH
 
每次用的時(shí)候進(jìn)行設(shè)置
- #. set-env.sh
 - 或者是
 - source set-env.sh
 
安裝qt-embed請參考我的這個(gè)帖子:http://www.qtcn.org/bbs/read.php?tid=22600
4、移植到開發(fā)板
下面通過NFS方式來測試是否成功(你必須提前配置好nfs)
先準(zhǔn)備好2個(gè)nfs目錄,取名為nftsroot
一個(gè)是用來備用的,取名為fonts
(1)準(zhǔn)備庫和字體
- #cp -a /usr/local/Trolltect/QtopiaCore-4.3.0-arm/lib /nfsroot
 
然后在usr/local/Trolltect/QtopiaCore-4.3.0-arm里面收索到這些庫
- librt.so,librt.so.1,libstdc++.so,libstdc++.so.6,libstdc++.so.6.0.1
 
筆者就是在運(yùn)行時(shí)就提示要這些庫,所有大家還是先準(zhǔn)備好來,然后復(fù)制到/nfsroot/lib里
- #ls /nfsroot/lib
 - fonts libQtScript.prl libQtSvg.so.4.5.3
 - libgcc_s.so libQtScript.so libQtTest.la
 - libgcc_s.so.1 libQtScript.so.4 libQtTest.prl
 - libQtCore.la libQtScript.so.4.5 libQtTest.so
 - libQtCore.prl libQtScript.so.4.5.3 libQtTest.so.4
 - libQtCore.so libQtScriptTools.la libQtTest.so.4.5
 - libQtCore.so.4 libQtScriptTools.prl libQtTest.so.4.5.3
 - libQtCore.so.4.5 libQtScriptTools.so libQtXml.la
 - libQtCore.so.4.5.3 libQtScriptTools.so.4 libQtXml.prl
 - libQtGui.la libQtScriptTools.so.4.5 libQtXml.so
 - libQtGui.prl libQtScriptTools.so.4.5.3 libQtXml.so.4
 - libQtGui.so libQtSql.la libQtXml.so.4.5
 - libQtGui.so.4 libQtSql.prl libQtXml.so.4.5.3
 - libQtGui.so.4.5 libQtSql.so librt-2.3.2.so
 - libQtGui.so.4.5.3 libQtSql.so.4 librt.so
 - libQtNetwork.la libQtSql.so.4.5 librt.so.1
 - libQtNetwork.prl libQtSql.so.4.5.3 libstdc++.so
 - libQtNetwork.so libQtSvg.la libstdc++.so.6
 - libQtNetwork.so.4 libQtSvg.prl libstdc++.so.6.0.1
 - libQtNetwork.so.4.5 libQtSvg.so pkgconfig
 - libQtNetwork.so.4.5.3 libQtSvg.so.4
 - libQtScript.la libQtSvg.so.4.5
 
當(dāng)然這些庫文件不是每個(gè)都需要,用戶可以根據(jù)自己的應(yīng)用來選擇
#p#
接下來將開發(fā)板和主機(jī)通過網(wǎng)線連接起來,并在開發(fā)板里進(jìn)行mount
- #mount -t nfs 192.168.0.10:/nfsroot /mnt -o nolock
 - #ls /mnt
 - lib
 
接下來事字體(在lib目錄的fonts),字體比較麻煩,
根據(jù)文檔說明,Qtopia默認(rèn)查找字體的目錄是/usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts
我們有兩種方式來掛載字體庫。
第一種:
- #mount -t ramfs ramfs /usr
 - #cd /usr
 - #mkdir local && mkdir local/Trolltech
 - #ln -s /mnt local/Trolltech/QtEmbedded-4.5.3-arm
 - #ls /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib/fonts
 
這樣我們就配置好了。
如果上一種方法不行,看下面這種,一定可以!
第二種:
首先用到剛才的備用的nfs目錄 fonts(看名字就曉得用來掛載字體庫的)
- #cp -arf /usr/local/Trolltect/QtopiaCore-4.3.0-arm/lib/fonts /fonts
 
在開發(fā)板里
- #mount -t nfs 192.168.0.10:/fonts /usr/local/Trolltech/QtEmbedded-4.5.3-arm -o nolock
 
這樣就把字體庫鏈接到 /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts目錄來了
第二種方法是我同學(xué)想出來的,很不錯(cuò)吧,他的博客是:http://hi.baidu.com/armlinuxhouse/blog/item/c2fb91ca42b0811d7f3e6f10.html 里面有很多好的文章!
5、交叉編譯Hello World 程序
首先寫一個(gè)hello.cpp的程序
- #qmake -project
 - #qmake
 
得到一個(gè)hello的arm可執(zhí)行程序(通過file命令來查看它所屬的cpu)
并將該
- #cp hello /nfsroot
 
然后在超級終端里運(yùn)行
- #export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH
 - #cd /mnt
 - #./hello -qws
 
這樣就能看到你的運(yùn)行程序了!
小結(jié):Qt 4.5.3 移植全過程介紹完了,希望本篇文章對你有幫助!















 
 
 
 
 
 
 