arm-linux-qt環(huán)境的建立
QT/E 3.x系列比QT/E 2.x系列有非常大的改進,大大提高了開發(fā)進度,不再使用tmake,安裝也更簡單。但目前在網(wǎng)上關于QT/E 3.x系列的介紹還是比較少,
所以本文介紹一下QT/E 3.x系列的安裝。
一、建立arm交叉編譯工具鏈
在安裝QT/E之前,應確保arm-linux交叉編譯工具鏈已經(jīng)建立,如果還沒有可以參考以下步驟建立。
1、下載交叉編譯工具cross-2.95.3.tar.bz2(或其他版本如:cross-3.4.4.tar.bz2),這是已經(jīng)制作好的arm交叉編譯工具鏈,只需解壓及建交環(huán)境變量即可使用。
2、把文件cross-2.95.3.tar.bz2拷貝到一個文件夾,這里我用:/usr/local/arm這個目錄。 注意后面建立環(huán)境變量時要與之對應。
3、解壓 tar -xjvf cross-2.95.3.tar.bz2
4、建立環(huán)境變量復制內(nèi)容到剪貼板代碼:
export PATH=/usr/local/arm/2.95.3/bin:$PATH或者也可以寫進文件 ~/.bashrc中,這樣就不用每次開機都export啦。復制內(nèi)容到剪貼板代碼:
vi ~/.bashrc
在后面加上 export PATH=/usr/local/arm/2.95.3/bin:$PATH到此arm-linux交叉編譯工具鏈就已經(jīng)建好了。
二、編譯QT
1、QT/E自由版可到官網(wǎng)ftp下載。網(wǎng)址是:ftp://ftp.trolltech.com/qt/source/??勺约哼x擇一個版本下載,個人認為QT/E 3.x系列比較好用,
不過QT/E 2.x系列在網(wǎng)上的資料比較多。但建議不用qt/e 3.3.x 的版本,因為在本人開發(fā)的過程當中試用過qt/e 3.3.4和qt/e3.3.8,發(fā)現(xiàn)它們在ARM開發(fā)板上占
CPU的資源特高,一直占cpu 98%左右,現(xiàn)在我還沒找到原因,不知道有沒有哪位朋友也遇到這個問題。推薦用qt/e 3.1.0版本,我正在用,沒遇到什么問題。
(注:問題已經(jīng)得到解決,原來是鍵盤接口沒做好,等有空與大家分享一下移植鍵盤接口的過程)
2、在這里,本人假設用的是 qt-embedded-free-3.1.0.tar.bz2
3、把文件qt-embedded-free-3.1.0.tar.bz2 拷貝到一個文件夾,這里我用:/usr/local/arm這個目錄。 注意后面建立環(huán)境變量時要與之對應。
4、解壓 tar -xjvf qt-embedded-free-3.1.0.tar.bz2
把解壓后的文件夾qt-embedded-free-3.1.0改為qte。(可以不改,這里是為了方便,注意后面建立環(huán)境變量時要與之對應)
mv qt-embedded-free-3.1.0 qte
5、建立環(huán)境變量
vi ~/.bashrc
在后面加上復制內(nèi)容到剪貼板代碼:
export QTDIR=/usr/local/arm/qte
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH(請重新登陸,以使得環(huán)境變量生效)
6、配置QT
進入QT/E目錄: cd $QTDIR
輸入: ./configure -embedded arm -thread -no-cups -qvfb -depths 4,8,16,32
上述選項: -embedded arm 指目標平臺為arm; -thread 表示支持qt線程,本人開發(fā)當中用到; -qvfb 表示支持虛擬緩沖幀工具qvfb;
-depths 4,8,16,32 表示支持4,8,16,32 位的顯示顏色深度。還有很多選項就不一一列舉,請查看 ./configure -help。
此外還有一個選項我沒用的是 -qconfig local,你可以把一些開關變量寫到一個文件qconfig-local.h 中,并把它放到$QTDIR/src/tools下。
可參考這個目錄下的qconfig-small.h、qconfig-medium.h 、qconfig-large.h等文件,直接使用它們也行,如: -qconfig small 。通過這些開關變量,
可以把一些開發(fā)當中用不著的構(gòu)件去掉,減少qt庫的大小。這里要對QT比較熟練,初學者可先不理。
(本人在家里編譯到這里曾出現(xiàn)編譯 $QTDIR/include/qvaluestack.h 這個文件的時候出錯,后來把qt3.3.8對應的文件拷貝過來覆蓋便通過了,
估計是與gcc的版本不兼容的問題,我在公司里沒出現(xiàn)過這種問題)
7、編譯
make sub-src // 指定按精簡方式編譯開發(fā)包,也就是說有些Qt 類未被編
譯。
8、測試
至此編譯工作完成,最后測試一下是否能正常使用。我們可以用QT自帶的例子來測試,如:
cd $QTDIR/examples/aclock //或你自己新建一個QT工程也行
make clean //把原來的清掉
rm *.pro Makefile //刪掉,重新建立工程文件
qmake -project
qmake -spec $QTDIR/mkspecs/qws/linux-arm-g++ -o Makefile
-spec指定目標板的配置文件,這里我做的是linux arm平臺,注意在這里,$QTDIR/mkspecs/qws/linux-arm-g++ 它不是編譯器,是一個配置文件,
而編譯時用的編譯器是我們在第一步建立的arm交叉編譯工具鏈里面的編譯器。
make
如果沒出錯就表示你的QT/E環(huán)境已經(jīng)成功建立。如果提示說cannot find -lqte, 那么你試一下修改Makefile文件,找到-lqte ,把它改為-lqte-mt
再make一次一般就行了。這是因為如果用到QT線程或其它一些原因,它生成的庫不再是libqte.so.3.1.0,而是libqte-mt.so.3.1.0,所以它便找不到了。
三、移植到開發(fā)板(以下都是在目標機環(huán)境下)
1、新建一個目錄,如:/qt/lib。進入此目錄 cd /qt/lib
2、通過 ftp 把上面生成的qt庫文件libqte-mt.so.3.1.0下載到開發(fā)板/qt/lib/目錄下。(注意:不要用wget 下載,會破壞庫文件,
從而出現(xiàn) ld.so: dynamic-link.h: 62: elf_get_dynamic_info: Assertion `! "bad dynamic tag"
failed!.這種錯誤)
3、創(chuàng)建qt庫連接:
ln -s libqte-mt.so.3.1.0 libqte-mt.so
ln -s libqte-mt.so.3.1.0 libqte-mt.so.3
ln -s libqte-mt.so.3.1.0 libqte-mt.so.3.1
4、建立環(huán)境變量
vi ~/.bashrc
在后面加上復制內(nèi)容到剪貼板代碼:
export QTDIR=/qt
export QTEDIR=$QTDIR
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH4、到此目標板的環(huán)境已經(jīng)建好?,F(xiàn)在可以把上面的例子aclock下載到目標板上試一下能不能跑起來!
在開發(fā)板控制臺下輸入: ./aclock -qws
如果能跑起來但是鍵盤用不了,那是正常的情況,因為鍵盤、鼠標等設備的接口還沒加進QT/E的原因,而這個不是一兩句話能說清的,所以留到以后再另外補充!
補充一點:如果有類似這樣的提示: "./aclock: error while loading shared libraries: libstdc++.so.6: cannot load shared object file: No such file or directory." 你可以從我們第一步建立的arm交叉編譯工具鏈里的/usr/local/arm/2.95.3/arm-linux/lib/目錄下找到相應的庫文件下載到開發(fā)板的 /lib 目錄下即可。--
評論