深度解析 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(建議用的這個版本的,有些低版本的交叉編譯工具在編譯時會出錯)
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
解壓過程需要一段時間,解壓后的文件形成了 usr/local/ 文件夾,進入該文件夾,將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
進入下載頁面:選擇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 被安裝在這個目錄下/usr/local/Trolltech/QtEmbedded-4.5.3-arm 或者是/usr/local/Trolltech/QtEmbedded-4.5.3-generic
一般在/usr/local/Trolltech/QtEmbedded-4.5.3-arm
這里你可以新建一個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è)置
- #. set-env.sh
- 或者是
- source set-env.sh
安裝qt-embed請參考我的這個帖子:http://www.qtcn.org/bbs/read.php?tid=22600
4、移植到開發(fā)板
下面通過NFS方式來測試是否成功(你必須提前配置好nfs)
先準備好2個nfs目錄,取名為nftsroot
一個是用來備用的,取名為fonts
(1)準備庫和字體
- #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
筆者就是在運行時就提示要這些庫,所有大家還是先準備好來,然后復(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)然這些庫文件不是每個都需要,用戶可以根據(jù)自己的應(yīng)用來選擇
#p#
接下來將開發(fā)板和主機通過網(wǎng)線連接起來,并在開發(fā)板里進行mount
- #mount -t nfs 192.168.0.10:/nfsroot /mnt -o nolock
- #ls /mnt
- lib
接下來事字體(在lib目錄的fonts),字體比較麻煩,
根據(jù)文檔說明,Qtopia默認查找字體的目錄是/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é)想出來的,很不錯吧,他的博客是:http://hi.baidu.com/armlinuxhouse/blog/item/c2fb91ca42b0811d7f3e6f10.html 里面有很多好的文章!
5、交叉編譯Hello World 程序
首先寫一個hello.cpp的程序
- #qmake -project
- #qmake
得到一個hello的arm可執(zhí)行程序(通過file命令來查看它所屬的cpu)
并將該
- #cp hello /nfsroot
然后在超級終端里運行
- #export LD_LIBRARY_PATH=/mnt/lib:$LD_LIBRARY_PATH
- #cd /mnt
- #./hello -qws
這樣就能看到你的運行程序了!
小結(jié):Qt 4.5.3 移植全過程介紹完了,希望本篇文章對你有幫助!