久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

QT/E和Qtopia的編譯詳解

 guitarhua 2011-12-02

(一)編譯PC上的qpe

     今天我給大家分享一下我自己從編譯PC上的QT到編譯ARM上的QT(交叉編譯QPE)的過程,,首先說說編譯PC上的QT/E,,我起初的時候不知道編譯 PC上的QT/E編譯qpe和交叉編譯后的qpe有什么不同,,后來才發(fā)現(xiàn)的確有不同點(diǎn):PC上的QT/E的qpe環(huán)境編譯成功以后輸入:
#qvfb 彈出了虛擬幀緩沖器,,然后我們再打開一個終端,,輸入:
#qpe 在返回上一個終端,,發(fā)現(xiàn)qpe的圖形界面在虛擬幀緩沖的那個黑色框架中顯示出來
    而交叉編譯qpe以后,,輸入
#qvfb 彈出虛擬幀緩沖器以后,然后再打開一個終端,,輸入:
#qpe 系統(tǒng)出現(xiàn)錯誤:cannot execute binary file 說明不支持這樣的二進(jìn)制文件格式
    總結(jié)得出pc編譯QT/E以后qpe 是i386 的,,可以直接在PC機(jī)器上運(yùn)行,交叉編譯后的qpe是ARM的,,只有掛接了板子后才可以運(yùn)行(大家可以找到qpe,,然后用file命令檢測),具體操作如下:
#locate qpe | more  找到qpe位置,,找到后轉(zhuǎn)到它所在的目錄,,然后
#file qpe  這樣就可以看它(qpe)所支持的處理器格式了.

    下面我們來一步步分析我的編譯過程,
    硬件就不用說了:內(nèi)存256MB,主頻1.6GHZ,,因?yàn)槲沂菍W(xué)寫驅(qū)動的所以裸裝RedHat9.0(2.4.20-8)
    交叉編譯工具是2.95.3的,我把它放到了/usr/local/arm/目錄中,,然后在/etc/profile中配置了它的路徑
    注意:大多數(shù)廠家都提供了編譯QT/E和Qtopia的腳本,我建議自己跟著他們提供的腳本一步一步的做,,這樣以來錯了也知道是在哪一步出問題,。
    首先在創(chuàng)建目錄/yehuo2410/qt_x86用于編譯QT/E
    商家提供以下編譯資料:
tmake-1.11.tar.gz  ,qt-embede-2.3.7.tar.gz ,, qt-x11-2.3.2.tar.gz,,qt-free-1.7.tar.gz,,這些對編譯PC上的QT/E的qpe足夠了,不過在交叉編譯qpe的時 候,,還差兩份資料:e2fsprogs.1.35.tar.gz,,jpegsrc.v6b.tar.gz(必須要)
    現(xiàn)在開始腳本分析了:
#cd /yehuo2410 (野火2410是我自己取的,不局限于任何廠家ARM開發(fā)板)
#tar xzvf  +各個壓縮包,,解壓到/yehuo2410
    以下建立通用的目錄
#mv tmake-11 tmake
#mv qt-2.3.7.tar.gz qt
#mv qt-2.3.2.tar.gz  qt-x11
#mv qt-free-1.7.tar.gz qtopia

#cd qt-x11  轉(zhuǎn)到這個目錄開始編譯相應(yīng)的工具
#export QTDIR=$PWD  配置當(dāng)前QTDIR
#echo yes | ./configure -static -ro-xft -no-opengl -no-sm  形成Makefile文件
#make -C src/moc 編譯形成moc(元對象編譯器)工具
#cp src/moc/moc bin  拷貝上一步生成的moc到當(dāng)前目錄的bin
#make -C src  這一步是必須的
    以下兩步形成設(shè)計(jì)器designer和虛擬幀緩沖器qvfb
#make -C tools/designer
    這時候designer工具不會在tools/designer下形成,,而是在當(dāng)前目錄(qt-x11的bin目錄)下形成,故不用拷貝,,你會發(fā)現(xiàn)qt- x11/bin下多了uic,和designer工具,uic首先形成,,因?yàn)閐esigner在編譯是要用到uic工具,uic工具是qt中用來處 理.ui文件的工具,。
#make -C tools/qvfb
#cp tools/qvfb bin  

#strip bin/uic bin/moc bin/designer bin/qvfb 是對各個工具可執(zhí)行文件進(jìn)行節(jié)優(yōu)化
#cp /bin/* ../qt/bin  拷貝這些工具到 qt-x11的兄弟目錄qt中的bin目錄中,,qt/bin中有三個文件:findtr,
qt20fix,,qtrename140,,而qt-x11/bin中也有,拷貝的時候系統(tǒng)問題是否覆蓋(qt-x11/bin里的這三個文件是否覆蓋qt/bin里的這三個文件?),,我選擇是,。
# cd ..
    下面開始配置環(huán)境變量,很多腳本都這樣寫
#export QTDIR=$PWD/qt
#export QTEDIR=$QTDIR
#export QPEDIR=$PWD/qtopia
#export TMAKEDIR=$PWD/tmake
#export TMAKEPATH=$TMAKEDIR/llib/qws/linux-generic-g++(常規(guī)g++編譯器)這是和交叉編譯qpe 的一處不同,qws目錄中有很多包括手機(jī),PDA和ARM之類的g++編譯器,。
#export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 配置了這里就不用配置/etc./ld.so.conf文件了,。
    上述配置固然好,不過這樣只是針對當(dāng)前終端有效,,如果再打開一個新終端,,那么這些變量在新終端中不會生效,保險的方法是:在/etc/profile目錄 里把這些配置信息輸入到profile的末尾,,不過不能用$PWD了 要把所有$PWD字樣改成/yehuo2410/qt_x86,,注銷系統(tǒng),重新登陸后,,環(huán)境變量生效(有個立即生效的方法我忘記了),。
    如果這里沒有配置好,那么在編譯的時候可能出現(xiàn)tmake版本過低,,然后系統(tǒng)要求起碼要1.11版本的
tmake,這是因?yàn)槲覀冞x擇了全部安裝Linux操作系統(tǒng),,系統(tǒng)本來有個1.7版本的tmake,在沒有配置TMAKEDIR和TMAKEPATH的時候系統(tǒng)自動使用自己1.7版本的tmake,,所以出錯,。
#cd qt
#make clean 這里似乎沒有必要,不過建議執(zhí)行一下
#make -C src 注意:-C 選項(xiàng)是指在編譯是先轉(zhuǎn)到src目錄(不能自己直接轉(zhuǎn)到在src目錄make哦,因?yàn)槲以囘^了,,結(jié)果是失?。?br> #cd ..
#cd qtopia/src  開始編譯在PC上可以執(zhí)行的qpe了
#./configure -platform linux-generic-g++
#make  
    大約半個小時就可以編譯完成
    完成后打開任意一個終端,輸入 
#qvfb &
    打開另外新終端,,輸入
#qpe &
    切換到老終端,,就可以看到qpe在虛擬緩沖器qvfb上運(yùn)行的界面,代表你編譯PC上的qpe成功了
    有時候出現(xiàn)con't fine dev/fb0
    只要在/etc/prioile文件中,,輸入
export QWS_DLS_DISPLAY=QVFb:0
    注銷一次(有個可以立即生效的方法,我忘記了),就可以了
    編譯的過程大概就是這樣,,這已經(jīng)是最簡單的過程,,在Qtopia的編譯中會遇到更復(fù)雜,更繁瑣的問題,。

(二)交叉編譯qpe
    現(xiàn)在我們開始交叉編譯qpe吧,,不過要做好心理準(zhǔn)備,因?yàn)檎麄€過程將會遇到各種各樣的問題,, 失敗是很平常的,,關(guān)鍵是我們要挺過來,堅(jiān)持和摸索是我們每一個計(jì)算機(jī)工作者的法寶,,讓我們開始吧,,和PC上不同的地方我會用紅色顯示出來!
    首先我們要準(zhǔn)備編譯資料,,商家提供以下編譯資料:
tmake-1.11.tar.gz  ,,qt-embede-2.3.7.tar.gz , qt-x11-2.3.2.tar.gz,,qt-free-1.7.tar.gz,,這些對編譯PC上的QT/E的qpe足夠了,不過在交叉編譯qpe的時 候,,還差兩份資料:e2fsprogs.1.35.tar.gz,,jpegsrc.v6b.tar.gz,所以必須去網(wǎng)站上下載,,也可以向別人索要,。
    同樣我在/yehuo2410/下建立目錄qt_arm作為交叉編譯目錄
好!我們開始分析腳本:
#cd /yehuo2410/qt_arm (拷貝上述所有壓縮包到該目錄包括e2fsprogs-1.35.tar.gz和jpegsrc.v6b.tar.gz兩個壓縮包)
當(dāng)前目錄為/yehuo2410/qt_arm
#tar xzvf  +各個壓縮包,,解壓到/yehuo2410/qt_arm,,記得要解壓e2...和jpegsrc....兩個包哦
#mv tmake-11 tmake
#mv qt-2.3.7.tar.gz qt
#mv qt-2.3.2.tar.gz  qt-x11
#mv qt-free-1.7.tar.gz qtopia

#cd qt-x11  轉(zhuǎn)到這個目錄開始編譯相應(yīng)的工具
#export QTDIR=$PWD  配置當(dāng)前QTDIR
#echo yes | ./configure -static -ro-xft -no-opengl -no-sm  形成Makefile文件
#make -C src/moc 編譯形成moc(元對象編譯器)工具
#cp src/moc/moc bin  拷貝上一步生成的moc到當(dāng)前目錄的bin
#make -C src  這一步是必須的
以下兩步形成設(shè)計(jì)器designer和虛擬幀緩沖器qvfb
#make -C tools/designer
這時候designer工具不會在tools/designer下形成,而是在當(dāng)前目錄(qt-x11的bin目錄)下形成,,故不用拷貝,,你會發(fā)現(xiàn)qt- x11/bin下多了uic,和designer工具,uic首先形成,因?yàn)閐esigner在編譯是要用到uic工具,uic工具是qt中用來處 理.ui文件的工具,。
#make -C tools/qvfb
#cp tools/qvfb bin  

#strip bin/uic bin/moc bin/designer bin/qvfb 是對各個工具可執(zhí)行文件進(jìn)行節(jié)優(yōu)化
#cp /bin/* ../qt/bin  拷貝這些工具到 qt-x11的兄弟目錄qt中的bin目錄中,,qt/bin中有三個文件:findtr,
qt20fix,,qtrename140,,而qt-x11/bin中也有,拷貝的時候系統(tǒng)問題是否覆蓋(qt-x11/bin里的這三個文件是否覆蓋qt/bin里的這三個文件?),,我選擇是,。
# cd ..
下面開始配置環(huán)境變量,很多腳本都這樣寫
#export QTDIR=$PWD/qt
#export QTEDIR=$QTDIR
#export QPEDIR=$PWD/qtopia
#export TMAKEDIR=$PWD/tmake
#export TMAKEPATH=$TMAKEDIR/llib/qws/linux-arm-g++(常規(guī)g++編譯器)這點(diǎn)就和PC上的不同了,qws目錄中有很多包括手機(jī),PDA和ARM之類的g++編譯器,。
#export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH 配置了這里就不用配置
/etc./ld.so.conf文件了,,同樣,為了保險,,我把上述信息寫到了/etc/profile 文件中并且在/etc/profile中的$PWD替換為/yehuo2410/qt_arm,我們不用擔(dān)心以前編譯的PC版本的qpe會受到影響,,當(dāng)我 們真正要用到PC版本的qpe的時把/etc/profile里面的這一部分涉及的/yehuo2410/qt_arm字符修改成/yehuo2410 /qt_x86字符就可以了,當(dāng)然,,設(shè)置完成以后注銷系統(tǒng)以生效,。
#cd ..
#cd qt
#make clean
    再次強(qiáng)調(diào)以下步驟是必要的,否則會出現(xiàn)cannot fine -lqte問題
#cp $QPEDIR/src/qt/qconfig-qpe.h src/tools
    在下一步中我發(fā)現(xiàn)編譯PC上的qpe時做到這一步時,,會問你兩次(都回答yes),,而這里只會問一次,當(dāng)時我感到費(fèi)解,,因?yàn)楹蛷S家提供的腳本不一樣(廠商 提供的腳本是echo yes;echo no) ,,我擔(dān)心是哪里出錯了,但是我依然往下做,,直到最后也沒有出現(xiàn)這里的相關(guān)問題,,所以就不用擔(dān)心
#echo yes|./configure -platform linux-arm-g++ -qconfig  qpe -qvfb -depths 16,24,32
#make -C src

上面沒有問題的話那么我們開始準(zhǔn)備編譯qtopia目錄內(nèi)的東西啦!
#cd ..
如果你這樣做:
cd qtopia/src
./configure -platform linux-arm-g++
make 
   那么會出現(xiàn)這樣的錯誤:
cannot find -lqtopia以及uuid.h 找不到的問題
    這是因?yàn)槲覀儼l(fā)現(xiàn)qtopia/lib中l(wèi)ibuuid.so打頭的相關(guān)連接文件是一個錯誤文件連接,,因?yàn)檎也坏阶罱K被鏈接的那個 libuuid.so.6(具體名字我忘記了),,所以矛盾轉(zhuǎn)換為尋求新的libuuid.so打頭系列的文件的問題,這個時候你得開始編譯 e2fsprogs了,,只有通過編譯才能形成新的libuuid.so打頭系列的文件,。
    以下是具體編譯方法:
當(dāng)前目錄為/yehuo2410/qt_arm
#tar --xzvf  e2fsprogs.1.35.tar.gz
#cd e2fsprogs-1.35  
#./configure -host=arm-linux  -with-cc=arm-linux-gcc  -with-linker=arm-linux-ld -enable-eld-shlibs
-prefix=/usr/local/arm/2.95.3/arm-linux
注意:這里prefix選項(xiàng)很重要,必須指定交叉編譯工具2.95.3中的arm-linux,,不要改成別的目錄或者不指定prefix選項(xiàng),,
#make
#make install lib/uuid  安裝到該目錄
    有個帖子上是這樣寫的:
/********************************************************/
#tar xzf e2fsprogs-1.35.tar.gz
#cd e2fsprogs-1.35
#./configure -host=arm-linux -with-cc=arm-linux-gcc -with-linker=arm-linux-ld -enable-elf-shlibs -prefix=/usr/local/arm/2.95.3/arm-linux
#make
#make install lib/uuid/
將e2fsprogs-1.35/lib/目錄下uuid的文件夾復(fù)制到/armsys2410/qt_arm/qtopia/include下
將e2fsprogs-1.35/lib/中的libuuid.a libuuid.so libuuid..so.1 libuuid.so.1.2復(fù)制到/armsys2410/qt_arm/qtopia/lib下
/*********************************************************/
    可是在/e2fsprogs-1.35/lib目錄里我們想要的四個文件中只有l(wèi)ibuuid.a文件存在,而根本就找不到libuuid.so libuuid.so.1(只有一個點(diǎn)號)以及l(fā)ibuuid.so.1.2,,這個時候我發(fā)現(xiàn)/usr/local/arm/2.95.3/arm- linux/lib中生成了libuuid.so,libuuid.so.1,libuuid.so.1.2,,后來我用file命令查看 libuuid.so.1.2所屬處理器類型是ARM。所以得到了這三個文件,那天下午我的Linux文件系統(tǒng)崩潰了,,所以一切都要重來,,當(dāng)我又做到這一 步時,編譯e2fsprogs以后發(fā)現(xiàn)e2fsprogs-1.35/lib目錄中和usr/local/arm/2.95.3/arm-linux /lib中都生成了libuuid.so,,libuuid.so.1以及l(fā)ibuuid.so.1.2文件,,而且都是支持ARM處理器的。
    總結(jié)得:如果在e2fsprogs-1.35/lib中找不到libuuid.so,libuuid.so.1,libuuid.so.1.2三個文件,, 那么建議去看一下usr/local/arm/2.95.3/arm-linux/lib目錄中是否存在這三個文件,,如果不存在那就重新解壓 e2fsprogs-1.35.tar.gz,重來,。
    將e2fsprogs-1.35/lib/目錄下uuid的文件夾復(fù)制到/armsys2410/qt_arm/qtopia/include下
    將我們找到的libuuid.a libuuid.so libuuid..so.1 libuuid.so.1.2復(fù)制到/yehuo2410/qt_arm/qtopia/lib下
    好,!問題解決了。
    如果你這樣做:
cd qtopia/src
./configure -platform linux-arm-g++
make 
    那么會出現(xiàn)以下錯誤:
./usr/local/arm/2.95.3/arm-linux/bin/ld: cannot find -ljpeg
    這是因?yàn)樵趒t目錄內(nèi)編譯是configure文件默認(rèn)配置為支持jpeg,然后在最后編譯的時候找不到相關(guān)的鏈接庫.這個時候我們需要壓縮包jpegsrc.v6b.tar.gz,,來解決這個問題,按照帖子上的操作:
/**********************************************/
    下載jpegsrc.v6b.tar.gz到qtarm目錄并解壓,進(jìn)入目錄jpeg-6b:
./configure --enable-shared
make  (得到libtools程序)
./configure --enable-shared
    修改生成的Makefile文件:
prefix = /qtarm/qt (qte的路徑)
CC =/usr/local/arm/2.95.3/bin/arm-linux-gcc
AR =/usr/local/arm/2.95.3/bin/arm-linux-ar rc
AR2=/usr/local/arm/2.95.3/bin/arm-linux-ranlib
cp jconfig.doc jconfig.h
mkdir -p /qtarm/qt/man/man1
make
    生成的libjpeg.so在.libs下,將libjpeg.so拷貝到/usr/local/arm/2.95.3/bin/arm-linux/lib
/***************************************************************************/
    我在jpeg-6b目錄內(nèi)使用ls命令找不到找不到libs目錄(我忽略了點(diǎn)號),所以我按照慣例的方法
#locate libjpeg.so 發(fā)現(xiàn)/usr/lib目錄下有一libjpeg.so打頭系列文件,,我當(dāng)時很懷疑那不是我想要的文件,,所以我在另外一臺PC上再一次按照同樣的方法安裝 Linux,發(fā)現(xiàn)剛安好的系統(tǒng)中/usr/lib中已經(jīng)存在了這些文件,,為了進(jìn)一步證明它們不是我想要的libjpeg.so系列文件,,我用file命令 查看libjpeg.so.62.00發(fā)現(xiàn)是i386處理器的,所以我放棄了使用它們,,無意間我在jpeg-6b/目錄下使用了以下命令:
#cd .libs 
#ls -l | grep libjpeg*
剛好發(fā)現(xiàn)了它們:
libjpeg.so-->libjpeg.so.62
libjpeg.so.62-->libjpeg.so.62.0.0
libjpeg.la-->../libjpeg.la
我用file命令查看這個鏈接庫libjpeg.so.62.0.0發(fā)現(xiàn)是支持ARM處理器的,,
總結(jié)得:我沒找到.libs目錄在哪里,錯誤的以為是/lib和/usr/lib
還有就是上述帖子最后一步:
生成的libjpeg.so在.libs下,將libjpeg.so拷貝到/usr/local/arm/2.95.3/bin/arm-linux/lib下.
應(yīng)該是:
將/jpeg-6b/.libs目錄下的libjpeg.la,,libjpeg.so ,,libjpeg.so.62 以及l(fā)ibjpeg.so.62.0.0拷貝到目錄
/usr/local/arm/2.95.3/arm-linux/lib  (沒有bin)
好!這個問題解決了,,再來:
cd qtopia/src
./configure -platform linux-arm-g++
make

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多