交叉編譯幾種常見的報錯_第1頁
交叉編譯幾種常見的報錯_第2頁
交叉編譯幾種常見的報錯_第3頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、.交叉編譯幾種常見的報錯由于是第一次交叉編譯,不知道會出現(xiàn)什么問題,思路就是先把gcc和ld都改成arm的,然后遇到什么問題在解決什么問題,以下過程都是在這個思路下進行。1.指定arm的編譯器和連接器:只是把gcc改為arm-none-linux-gnueabi-gcc,ld改為arm-none-linux-gnueabi-ld,其他的都沒有修改。出現(xiàn)以下錯誤:arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation arm

2、-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searching for -lfreetype arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searching for -lfreetype arm-none-linux-gnueabi-ld: cannot find -lfreetype分析原因是:鏈接的這些庫文件都是在PC編譯器下編譯出來的,現(xiàn)在把它們和用a

3、rm-none-linux-gnueabi-gcc編譯出來的文件做鏈接,當然會出錯。解決方法:這些庫重新用arm-gcc重新編譯生成相應的庫。下面使用是重新編譯庫文件的過程:重新編譯freetype根據(jù)交叉編譯的文檔,我創(chuàng)建了一個文件夾/usr/local/arm-linux來存放編譯后的庫文件。執(zhí)行:./configure host=arm-none-linux-gnueabi prefix=/usr/local/arm-linux注意:host的參數(shù)應該是交叉編譯環(huán)境的前綴。另外,freetype自動生成的include文件夾有點小問題,編譯完成后的include目錄結(jié)構(gòu)是/include

4、/ft2build.h和/include/freetype2/freetype/*.h如果直接使用會出現(xiàn)頭文件找不到的問題,這里涉及到freetype的一個小技巧:使用freetype時只需要包含ft2build.h這一個頭文件即可,因為ft2build.h里面會自動包含其他需要的頭文件。而ft2build.h中的包含其他頭文件的路徑是/freetype/*.h,顯然找不到相應的頭文件。我們把freetype2中的freetype文件整個拷貝到include目錄下,然后把freetype2刪除即可。原目錄結(jié)構(gòu):/include/freetype2/freetype/*.h/include/ft

5、2build.h修改以后是:/include/freetype/*.h/include/ft2build.h如果安裝完成后直接就是后面這個目錄結(jié)構(gòu)就不用修改了。或者在編譯時直接使用-I再加一個頭文件的目錄。-I/include/freetype2使用arm編譯器和使用pc上的編譯器編譯過程差不多,需要注意的是我們需要重新指定路徑以免把原來的庫文件覆蓋掉。2.在編譯時出現(xiàn)這種錯誤:解決上面的問題之后,再次編譯,出現(xiàn)以下錯誤:/usr/local/arm-2009q1/bin/./arm-none-linux-gnueabi/libc/usr/include/sys/types.h:62: err

6、or: conflicting types for dev_t /usr/local/arm-2009q1/bin/./arm-none-linux-gnueabi/libc/usr/include/linux/types.h:13: error: previous declaration of dev_t was here開始以為是編譯器自動尋找types.h文件然后自動包含進來了,后來所有的都頭文件刪除,然后每加一個頭文件進來就編譯看看是否出現(xiàn)錯誤,后來發(fā)現(xiàn)這個我的交叉編譯器對于某些頭文件的使用順序有要求。例如:#include <fcntl.h>#include <li

7、nux/fb.h>#include <linux/fb.h>#include <fcntl.h>第一種編譯沒有問題,第二種會出現(xiàn)上面的錯誤。而這兩種寫法在PC的gcc上都沒有錯誤。我的交叉編譯器版本:gcc version 4.3.3 (Sourcery G+ Lite 2009q1-203)感覺這個問題是由于pc上的gcc和交叉編譯使用的gcc的行為不同才導致的。3.鏈接時這樣的錯誤:arm-none-linux-gnueabi-ld main.o es_run_file.o es_fbctl.o es_time.o es_sql.o es_fbio.o es_

8、dao.o es_utf8.o es_copy.o es_font.o -o main  -L/usr/local/arm-linux/lib -lfreetype -lpthread -lsqlite3 -lncurses arm-none-linux-gnueabi-ld: warning: cannot find entry symbol _start; defaulting to 00009050 es_copy.o: In function file_exist: /root/work/es_copy.c:32: undefined reference to stat最后一個錯誤是找不到stat,我把es_copy.c文件單獨拿出來修改以后編譯:arm-none-linux-gnueabi-gcc es_copy.c沒有錯誤。把Makefile里的連接器也改成arm-none-linux-gnueabi-gc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論