中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
交叉編譯幾種常見(jiàn)的報(bào)錯(cuò)

由于是第一次交叉編譯,不知道會(huì)出現(xiàn)什么問(wèn)題,思路就是先把gcc和ld都改成arm的,然后遇到什么問(wèn)題在解決什么問(wèn)題,以下過(guò)程都是在這個(gè)思路下進(jìn)行。

1.指定arm的編譯器和連接器:

只是把gcc改為arm-none-linux-gnueabi-gcc,ld改為arm-none-linux-gnueabi-ld,其他的都沒(méi)有修改。出現(xiàn)以下錯(cuò)誤:

arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation
arm-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

分析原因是:鏈接的這些庫(kù)文件都是在PC編譯器下編譯出來(lái)的,現(xiàn)在把它們和用arm-none-linux-gnueabi-gcc編譯出來(lái)的文件做鏈接,當(dāng)然會(huì)出錯(cuò)。

解決方法:這些庫(kù)重新用arm-gcc重新編譯生成相應(yīng)的庫(kù)。

下面使用是重新編譯庫(kù)文件的過(guò)程:

重新編譯freetype

根據(jù)交叉編譯的文檔,我創(chuàng)建了一個(gè)文件夾/usr/local/arm-linux來(lái)存放編譯后的庫(kù)文件。執(zhí)行:

./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux

注意:host的參數(shù)應(yīng)該是交叉編譯環(huán)境的前綴。

另外,freetype自動(dòng)生成的include文件夾有點(diǎn)小問(wèn)題,編譯完成后的include目錄結(jié)構(gòu)是/include/ft2build.h和

/include/freetype2/freetype/***.h如果直接使用會(huì)出現(xiàn)頭文件找不到的問(wèn)題,這里涉及到freetype的一個(gè)小技巧:使用freetype時(shí)只需要包含ft2build.h這一個(gè)頭文件即可,因?yàn)閒t2build.h里面會(huì)自動(dòng)包含其他需要的頭文件。而ft2build.h中的包含其他頭文件的路徑是/freetype/***.h,顯然找不到相應(yīng)的頭文件。我們把freetype2中的freetype文件整個(gè)拷貝到include目錄下,然后把freetype2刪除即可。

原目錄結(jié)構(gòu):

…/include/freetype2/freetype/***.h

…/include/ft2build.h

修改以后是:

…/include/freetype/***.h

…/include/ft2build.h

如果安裝完成后直接就是后面這個(gè)目錄結(jié)構(gòu)就不用修改了?;蛘咴诰幾g時(shí)直接使用-I再加一個(gè)頭文件的目錄。

-I/…/include/freetype2

使用arm編譯器和使用pc上的編譯器編譯過(guò)程差不多,需要注意的是我們需要重新指定路徑以免把原來(lái)的庫(kù)文件覆蓋掉。

2.在編譯時(shí)出現(xiàn)這種錯(cuò)誤:

解決上面的問(wèn)題之后,再次編譯,出現(xiàn)以下錯(cuò)誤:

/usr/local/arm-2009q1/bin/../arm-none-linux-gnueabi/libc/usr/include/sys/types.h:62: error: 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

開(kāi)始以為是編譯器自動(dòng)尋找types.h文件然后自動(dòng)包含進(jìn)來(lái)了,后來(lái)所有的都頭文件刪除,然后每加一個(gè)頭文件進(jìn)來(lái)就編譯看看是否出現(xiàn)錯(cuò)誤,后來(lái)發(fā)現(xiàn)這個(gè)我的交叉編譯器對(duì)于某些頭文件的使用順序有要求。例如:

#include <fcntl.h>

#include <linux/fb.h>

#include <linux/fb.h>

#include <fcntl.h>

第一種編譯沒(méi)有問(wèn)題,第二種會(huì)出現(xiàn)上面的錯(cuò)誤。而這兩種寫(xiě)法在PC的gcc上都沒(méi)有錯(cuò)誤。

我的交叉編譯器版本:gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)

感覺(jué)這個(gè)問(wèn)題是由于pc上的gcc和交叉編譯使用的gcc的行為不同才導(dǎo)致的。

3.鏈接時(shí)這樣的錯(cuò)誤:

arm-none-linux-gnueabi-ld main.o es_run_file.o es_fbctl.o es_time.o es_sql.o es_fbio.o es_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’

最后一個(gè)錯(cuò)誤是找不到stat,我把es_copy.c文件單獨(dú)拿出來(lái)修改以后編譯:

arm-none-linux-gnueabi-gcc es_copy.c

沒(méi)有錯(cuò)誤。把Makefile里的連接器也改成arm-none-linux-gnueabi-gcc,以上兩個(gè)問(wèn)題都消失了。這個(gè)問(wèn)題在gcc和arm-none-linux-gnueabi-gcc這兩種編譯器中都存在,應(yīng)該鏈接時(shí)ld的參數(shù)設(shè)置不對(duì),具體怎樣設(shè)置還是沒(méi)有找到。

總結(jié):交叉編譯的一般過(guò)程

1.交叉編譯并安裝使用到的共享庫(kù)。

2.交叉編譯源程序。

3.調(diào)試

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
編譯U-Boot時(shí)command not found的解決方法
交叉編譯gcc
gcc除法問(wèn)題
飛騰FT2000-4銀河麒麟v10裝Qt5.9.8
qte4.7.1
compile QT for freescale
更多類(lèi)似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服