自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt 移植時出現(xiàn)編譯錯誤

移動開發(fā)
本文介紹的是Qt 移植時出現(xiàn)編譯錯誤,QT在移植過程中遇到的一個編譯問題,我們先來看內(nèi)容,如何解決。

Qt 移植時出現(xiàn)編譯錯誤是本文要介紹的內(nèi)容,問題的解決,我們先來看內(nèi)容。決定開始 移植Linuxmini2440。首先就是在ubuntu下建立交叉編譯工具鏈。借著在Fedora 下建立ARM-Linux的交叉編譯工具的經(jīng)驗,按理說應(yīng)該是不會有問題的,但是結(jié)果是比在Fedora下碰到的問題多得多了。以下先介紹成功編譯的過程,碰到的問題和解決辦法后面說。

這次編譯過程中對我有重大幫助的資料有:

  1. 《 編譯Mysql時configure: error: No curses/termcap library found 的錯誤解決方法》  
  2. 《[原創(chuàng)]在ubuntu下動手編譯arm-elf工具》  
  3. 《在ubuntu下使用crosstool制作交叉編譯工具》  
  4. 《 ubuntu 8.04中編譯ARM交叉平臺的一點心得!》 

關(guān)于crosstool的基本知識在我以前的

  1. 《在 Fedora 下建立 ARM-Linux 交叉編譯環(huán)境》 

中已有介紹,這里我再多說,以下是具體過程:
(1)保證你的ubuntu8.10下安裝了以下軟件開發(fā)工 具。 Bison flex build-essential patch [color="#ff0000"]libncurses5-dev 我并沒有試過沒裝這些工具的后果,都是網(wǎng)上的經(jīng)驗,你要是不信這個邪,就自己吃吃這個螃蟹。

(2)因為ubuntu8.10自帶的是gcc-4.3.2無法用crosstool正常編譯交叉編譯器,所以必須安裝gcc-4.1,但是不必卸載 4.3.2。方法是用新立得軟件包管理器安裝gcc-4.1,之后 參考

chinazcw的方法 sudo rm /usr/bin/gcc (刪除GCC,它只是個到gcc-4.3.2的軟連接文件)  

sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc 建立GCC到gcc-4.1的軟連接) 

(3)如果你運行l(wèi)s -la /bin/sh

命令看到/bin/sh其實是一個指向dash的軟鏈接,則請運行以下命令,將/bin/sh鏈接到bash。sudo mv /bin/sh /bin/sh.oldsudo ln -sf bash /bin/sh

(4)按照老方法修改crosstool的文件:demo-arm9tdmi.sh、gcc-4.1.1-glibc-2.3.2.dat,最后運行demo-arm9tdmi.sh。這些過程請參考我以前的文檔

  1. 《在 Fedora 下建立 ARM-Linux 交叉編譯環(huán)境》。 

過程就這么簡單,但是有些是用失敗換來的。下面介紹下我的編譯血淚史:     一開始,我并不想用gcc-4.1而是想用自帶的gcc-4.3.2,然后...
  
(1)編譯到glibc的時候,在配置的時候會檢測gcc的版本,configure 腳本認(rèn)為gcc-4.3.2版本太老(其實是因為當(dāng)時gcc還沒有這么高的版本,只要不是3.2到4.1之間的版本,都認(rèn)為too old),不能編譯。

這是可以解決的,方法就是修改glibc-2.3.2根目錄下 的configure 文件中的第1275行:

  1. test -n "$CC" && breakdoneif test -z "$CC";  
  2.  then  ac_verc_fail=yeselse   
  3.   # Found it, now check the version.   
  4.    echo "$as_me:$LINENO: checking version of $CC" >&5echo $ECHO_N "checking version of $CC... $ECHO_C" >
  5. &6  ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'`  case $ac_prog_version in    '') 
  6. ac_prog_version="v. ?.??, bad";  
  7.     ac_verc_fail=yes;;    
  8.       3.[2-9]*|4.[[color="#ff0000"]0-3]*)     
  9.     ac_prog_version="$ac_prog_version, ok"ac_verc_fail=no;;    *) ac_prog_version="$ac_prog_version, bad";  
  10.    ac_verc_fail=yes;; 

這樣就可以騙過configure ,繼續(xù)編譯下去。

但是修改的時機要把握好,要在 demo-arm9tdmi.sh解壓完glibc-2.3.2后,運行其configure之前。我直接就將configure拷出來,修改后在crosstool解壓完所有文件后直接覆蓋源文件。
其實這種方法我在fedora9下使用crosstool時就用過,但是當(dāng)時發(fā)現(xiàn)f9真是做得比f8差,歷史的倒退,所以就到回去用f8了,就沒寫文章總結(jié)。

(2)編譯gcc-3.3.6的時候,出現(xiàn)以下錯誤:/usr/include/bits/fcntl2.h:51: error: call to '__open_missing_mode' declared with attribute error: open with O_CREAT in second argument needs 3 arguments

這純屬軟件bug,因為使用open函數(shù)的時候,如果在第二個參數(shù)中使用了 O_CREAT,就必須添加第三個參數(shù):創(chuàng)建文件時賦予的初始權(quán)限。 而在gcc-3.3.6/gcc/的collect2.c文件中有漏掉第三個參數(shù)的錯誤,而gcc-4.3對語法錯誤的檢查嚴(yán)格是出了名的(4.1就不會 因此錯誤退出),所以就退出了。    這也是可以解決的,就是在gcc-3.3.6/gcc/collect2.c中的第1575行改為:

  1. redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, [color="#ff0000"]0777); 

我還發(fā)現(xiàn)glibc-2.3.2/login/tst-grantpt.c也有一個類似錯誤,一起改過來,除后患。第44行:fd = open (file, O_RDWR | O_CREAT, [color="#ff0000"]0777);

修改的時機也要把握好,我是在crosstool解壓完所有文件后和之前configure 文件一起直接覆蓋源文件。

(3)經(jīng)歷了以上的痛苦后,繼續(xù)編譯,會出現(xiàn)以下錯誤:*** buffer overflow detected ***: arm-9tdmi-linux-gnu-ar terminated

fuck!?。。。。。?!編譯出來的 arm-9tdmi-linux-gnu-ar根本沒法用!被耍了!放棄gcc-4.3.2!!!!!   要是哪位仁兄解決了以上問題,并編譯成功,一定要通知小弟?。?/p>

(4)安裝了gcc-4.1之后,重新編譯。心想這回好了吧?!不想,有出了以下錯誤:In [color="#ff0000"]file included from

  1. version.c:33:/home/tekkaman/working/crosstool-0.43/build/arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2
  2. /build-glibc/csu/version-info.h:2:1: missing terminating "[color="#000000"]character/home/tekkaman/working/crosstool-0.43/build/
  3. arm-9tdmi-linux-gnu/gcc-4.1.1-glibc-2.3.2/build-glibc/csu/version-info.h:3:1: missing terminating "character 

google后發(fā)現(xiàn),原來是ubuntu將系統(tǒng)默認(rèn)的shell設(shè)置成了dash (the Debian Almquist Shell),所以通過腳本生成的文件格式和bash的不一樣,導(dǎo)致了編譯錯誤。在使用了ursa的方法后問題解決。

  1. sudo mv /bin/sh /bin/sh.oldsudo ln -sf bash /bin/sh 

(5)繼續(xù)重新編譯,在gcc做好后(此時gcc已可用,只是gdb還沒編譯好),編譯gdb的時候出了以下錯誤:

  1. configure: error: no termcap library found 

很顯然,是因為沒裝一個庫文件造成的,google后發(fā)現(xiàn)正解:用新立得安裝libncurses5-dev(或是apt-get install libncurses5-dev)即可。  

最后,編譯成功,看到了盼望已久的“done”。

小結(jié):關(guān)于Qt 移植時出現(xiàn)編譯錯誤的內(nèi)容介紹完了,希望本文對你有所幫助!

 

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-09-17 08:40:49

JAVA編譯錯誤

2013-04-03 14:25:43

iOS開發(fā)Xcode編譯錯誤和警

2011-07-04 15:13:31

QT MPlayer 移植

2010-01-15 10:31:19

Linux編譯

2011-06-13 11:24:55

QT MPlayer 移植

2011-06-29 11:06:12

Qt Qvfb

2011-06-13 11:07:22

QT 移植

2010-05-27 13:48:21

MySQL安裝

2025-04-02 07:59:15

2011-06-09 16:47:56

Qt 嵌入式

2009-12-28 16:03:42

編寫ADO.NET

2011-06-15 18:20:20

Qt 移植 Android

2011-06-13 15:57:26

linux QT QTOPIA

2010-01-05 18:03:57

2011-06-29 10:46:01

Qt Eembedded Linux

2011-07-02 13:42:24

Qt 移植

2011-06-21 16:51:21

Qt 靜態(tài) 編譯

2011-06-08 15:27:24

QT QT 4.5 編譯

2011-06-09 15:18:07

QT 編譯

2010-08-12 15:31:07

DB2數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號