<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > arm-linux-gcc和arm-elf-gcc 區別

arm-linux-gcc和arm-elf-gcc 區別

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
在基于A(yíng)RM的嵌入式系統開(kāi)發(fā)中,常常用到交叉編譯的GCC工具鏈有兩種:arm-linux-*和 arm-elf-*,兩者區別主要在于使用不同的C庫文件。arm-linux-*使用GNU的Glibc,而arm-elf-*一般使用 uClibc/uC-libc或者使用REDHAT專(zhuān)門(mén)為嵌入式系統的開(kāi)發(fā)的C庫newlib.Glibc。uClibc/uC-libc以及 newlib都是C語(yǔ)言庫文件,只是所應用的領(lǐng)域不同而已,Glibc是針對PC開(kāi)發(fā)的,uClibc/uC-libc是與Glibc API兼容的小型化C語(yǔ)言庫,實(shí)現了Glibc部分功能。

  關(guān)于uClibc/uC-libc的說(shuō)明,詳見(jiàn)如下:

  There are two libc libraries commonly used with uClinux. uC-libc and uClibc. They are quite different despite their similar names. Here is a quick overview of how they are different.

  uC-libc is the original library for uClinux. It was based on sources from the Linux-8086 C library which was part of the ELKs project with m68000 support added by Jeff Dionne and Kenneth Albanowski. It is a fairly complete libc implementation, however, some of the APIs are a little non-standard and quite a few common libc routines are not present. Currently it has stable support for m68000, ColdFire and ARM (Non-MMU) architectures. It was primary design goal is to be small and light weight. It does try to conform to any standards, although its API tries to be compatible with most libcs,
it is not always exactly the same.

  The uClinux distribution provides an environment that can compile using either uC-libc or uClibc depending on your needs. For m68000 and Coldfire platforms it is generally better to chose uC-libc as it supports shared libraries and is the most commonly used libc for these CPUs. uClibc also works quite well with almost all platforms supported by the distribution. Which libc you choose to use will be decided by your requirements

譯文:

uClinux有兩個(gè)經(jīng)常使用的libc庫:uC-libc和uClibc。雖然兩者名字很相似,其實(shí)有差別,下面就簡(jiǎn)單的介紹一下二者的不同之處。uC -libc是最早為uClinux開(kāi)發(fā)的庫,是Jeff Dionne和Kenneth Albanowski為在EKLs項目中支持m68000在Linux-8086 C庫源碼上移植的。uC-libc是一個(gè)完全的libc實(shí)現,但其中有一些api是非標準的,有些libc的標準也沒(méi)有實(shí)現。uC-libc穩定地支持 m68000,ColdFire和沒(méi)有MMU的ARM。其主要設計目標是“小”、"輕",并盡量與標準一致,雖然它的API和很多libc兼容,但是似乎并不像它期望的那樣和所有標準一致。

uClibc就是為了解決這個(gè)問(wèn)題從uC-libc中發(fā)展出來(lái)的。它的所有API都是標準的(正確的返回類(lèi)型,參數等等),它彌補了uC-libc中沒(méi)有實(shí)現的libc標準,現在已經(jīng)被移植到多種架構中。一般來(lái)講,它盡量兼容glibc以便使應用程序用uClibc改寫(xiě)變的容易。uClibc能夠在標準的 VM linux和uClinux上面使用。為了應用程序的簡(jiǎn)潔,它甚至可以在許多支持MMU的平臺上被編譯成共享庫。Erik Anderson在uClibc背后做了很多的工作。uClibc支持許多系列的處理器:m68000,Coldfire,ARM,MIPS,v850, x86,i960,Sparc,SuperH,Alpha,PowerPC和Hitachi 8。不斷增加的平臺支持顯示uClibc能夠很容易的適應新的架構。uClinux發(fā)行版提供了環(huán)境能夠讓你選擇使用uC-libc或是uClibc編譯。對于m68000和Coldfire平臺來(lái)說(shuō),選擇uC-libc還是稍微好一點(diǎn),因為它支持共享庫,而共享庫是這些cpu經(jīng)常使用的 libc.uClibc也幾乎和所有的平臺都能很好的工作。選擇哪種libc取決于你的需求。

newlib 是一個(gè)用于嵌入式系統的開(kāi)放源代碼的C語(yǔ)言程序庫,由libc和libm兩個(gè)庫組成,特點(diǎn)是輕量級,速度快,可移植到很多CPU結構上。newlib實(shí)現了許多復雜的功能,包括字符串支持,浮點(diǎn)運算,內存分配(如malloc)和I/O流函數(printf,fprinf()等等)。其中libc提供了c 語(yǔ)言庫的實(shí)現,而libm提供了浮點(diǎn)運算支持。

在為ARM交叉編譯gcc編譯器時(shí),對gcc指定不同的配置選項時(shí),使用的C語(yǔ)言庫就不同,gcc編譯器默認使用Glibc,也可以使用 uClibc/uC-libc(基本兼容Glibc API),當使用--with-newlib時(shí),gcc編譯器不使用Glibc。當沒(méi)有交叉編譯Glibc時(shí),可以使用--with-newlib禁止連接Glibc而編譯bootstrap gcc編譯器。從gcc源目錄下的config/arm中的t-linux和t-arm-elf中可以看出,不同的--target也影響gcc連接C語(yǔ)言庫,t-linux(--target=arm-linux)默認使用Glibc,-arm-elf(--target=arm-elf)使用- Dinhibit_libc禁止連接Glibc,這時(shí)我們就可以使用newlib等其他C語(yǔ)言庫編譯GCC工具鏈。

雖然GCC工具鏈配置了不同的的C語(yǔ)言庫,但由于這些C語(yǔ)言庫都可以用來(lái)支持GCC,它們對核心數據的處理上不存在較大出入。因而arm-linux-* 和 arm-elf-*區別主要表現在C語(yǔ)言庫的實(shí)現上,例如不同系統調用,不同的函數集實(shí)現,不同的ABI啟動(dòng)代碼以及不同系統特性等微小的差別。

arm-linux-*和 arm-elf-*的使用沒(méi)有一個(gè)絕對的標準,排除不同庫實(shí)現的差異,gcc可以編譯任何系統。arm-linux-*和 arm-elf-*都可以用來(lái)編譯裸機程序和操作系統,只是在遵循下面的描述時(shí)系統程序顯得更加協(xié)調:

arm-linux-*針對運行linux的ARM機器,其依賴(lài)于指定的C語(yǔ)言庫Glibc,因為同樣使用Glibc的linux而使得arm-linux-*在運行linux的ARM機器上編譯顯得更加和諧。

arm-elf-*則是一個(gè)獨立的編譯體系,不依賴(lài)于指定的C語(yǔ)言庫Glibc,可以使用newlib等其他C語(yǔ)言庫,不要求操作系統支持,當其使用為嵌入式系統而設計的一些輕巧的C語(yǔ)言庫時(shí)編譯裸機程序(沒(méi)有linux等大型操作系統的程序),如監控程序,bootloader等能使得系統程序更加小巧快捷。


關(guān)鍵詞: arm-linux-gccarm-elf-gc

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>