日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下不同arm 编译器的异同

發布時間:2024/4/19 linux 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下不同arm 编译器的异同 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、EABIarm-2008q3-39-arm-none-eabi?
Sourcery G++ Lite 2008q3-39?All versions...?
Sourcery G++ for ARM EABI is for use in bare-metal and/or RTOS environments.(適用于編譯裸機或RTOS環境上的應用,比如u-boot等);Run-Time Libraries:ARMv4 - Little-Endian, Soft-Float;ARMv4 Thumb -Little-?Endian, Soft-Float;ARMv6-M Thumb - Little-Endian, Soft-Float;ARMv7 Thumb-2 - Little-Endian, Soft-Float。
2、uClinux?arm-2008q3-42-arm-uclinuxeabi
Sourcery G++ Lite 2008q3-42?All versions...?
Sourcery G++ for ARM uClinux is for systems running the Linux kernel without using a memory-management unit (MMU). You can use Sourcery G++ to build both the uClinux kernel and uClinux applications. )適用于編譯linux內核和應用程序,不帶MMU的CPU);Run-Time Libraries:ARMv4T - Little-Endian, Soft-Float;ARMv6-M Thumb - Little-Endian, Soft-Float;ARMv7 Thumb-2 - Little-Endian, Soft-Float。
3、GNU/Linux?arm-2008q3-41-arm-none-linux-gnueabi
Sourcery G++ Lite 2008q3-41?All versions...?
Sourcery G++ for ARM GNU/Linux is for use in developing for systems which run the Linux kernel. You can use Sourcery G++ to build both the Linux kernel and Linux applications.(適用于編譯linux內核和應用程序,帶MMU的CPU);Run-Time Libraries:ARMv4T - Little-Endian, Soft-Float, GLIBC;ARMv5T - Little-Endian, Soft-Float, GLIBC;ARMv7-A Thumb-2 - Little-Endian, Soft-Float, GLIBC。
4、SymbianOS?arm-2008q3-40-arm-none-symbianelf
Sourcery G++ Lite 2008q3-40?All versions...?
適用于編譯Symbian應用程序;Run-Time Libraries:ARMv5 - Little-Endian, Soft-Float;ARMv5 - Little-Endian, VFP。


如果用一句話講清楚arm-linux-gcc和arm-elf-gcc的區別的話,如何來說呢?

  arm-linux-gcc是針對arm + Linux的開發環境的,kernel使用的是linux,不是uclinux,arm是有硬件MMU的。

  而arm-elf-gcc是針對no MMU arm + uclinux的開發環境,kernel使用的是uclinux,硬件是廉價的無MMU的arm芯片。

  arm-linux-gcc倒是有點類似X86 PC環境下的linux開發。


arm-linux-gcc arm-elf-gcc 區別?
ARM的嵌入式系統開發中,常常用到交叉編譯的GCC工具鏈有兩種: arm-linux-*和 arm-elf-*,兩者區別主要在于使用不同的C庫文件。arm-linux-*使用?
GNU的Glibc,而arm-elf-*一般使用 uClibc/uC-libc或者使用REDHAT專門為嵌入式系統?
的開發的C庫newlib.Glibc。uClibc/uC-libc以及 newlib都是C語言庫文件,只是所應?
用的領域不同而已,Glibc是針對PC開發的,uClibc/uC-libc是與Glibc API兼容的小型?
化C語言庫,實現了Glibc部分功能。 ? 關于uClibc/uC-libc的說明,詳見如下:?
? 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 API's 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有兩個經常使用的libc庫:uC-libc和uClibc。 雖然兩者名字很相似,其實有差?
別,下面就簡單的介紹一下二者的不同之處。uC -libc是最早為uClinux開發的庫,是?
Jeff Dionne和Kenneth Albanowski為在EKLs項目中支持m68000在Linux-8086 C庫源碼?
上移植的。uC-libc是一個完全的libc實現,但其中有一些api是非標準的,有些libc的?
標準也沒有實現。uC-libc穩定地支持 m68000,ColdFire和沒有MMU的ARM。其主要設計?
目標是“小”、"輕",并盡量與標準一致,雖然它的API和很多libc兼容,但是似乎并?
不像它期望的那樣和所有標準一致。?
uClibc就是為了解決這個問題從uC-libc中發展出來的。它的所有API都是標準的(正確?
的返回類型,參數等等),它彌補了uC-libc中沒有實現的libc標準,現在已經被移植到?
多種架構中。一般來講,它盡量兼容glibc以便使應用程序用uClibc改寫變的容易。?
uClibc能夠在標準的 VM linux和uClinux上面使用。為了應用程序的簡潔,它甚至可以?
在許多支持MMU的平臺上被編譯成共享庫。Erik Anderson在uClibc背后做了很多的工 作。uClibc支持許多系列的處理器:m68000,Coldfire,ARM,MIPS,v850, x86, i960,Sparc,SuperH,Alpha,PowerPC和Hitachi 8。不斷增加的平臺支持顯示uClibc?
能夠很容易的適應新的架構。uClinux發行版提供了環境能夠讓你選擇使用uC-libc或是?
uClibc編譯。對于m68000和Coldfire平臺來說,選擇uC-libc還是稍微好一點,因為它 支持共享庫,而共享庫是這些cpu經常使用的 libc.uClibc也幾乎和所有的平臺都能很?
好的工作。選擇哪種libc取決于你的需求。?
newlib 是一個用于嵌入式系統的開放源代碼的C語言程序庫,由libc和libm兩個庫組?
成,特點是輕量級,速度快,可移植到很多CPU結構上。newlib實現了許多復雜的功?
能,包括字符串支持,浮點運算,內存分配(如malloc)和I/O流函數(printf,fprinf()?等等)。其中libc提供了c 語言庫的實現,而libm提供了浮點運算支持。 在為ARM交叉編譯gcc編譯器時,對gcc指定不同的配置選項時,使用的C語言庫就不同,?
gcc編譯器默認使用Glibc,也可以使用 uClibc/uC-libc(基本兼容Glibc API),當使用?
--with-newlib時,gcc編譯器不使用Glibc。當沒有交叉編譯Glibc時,可以使用?
--with-newlib禁止連接Glibc而編譯bootstrap gcc編譯器。從gcc源目錄下的?
config/arm中的t-linux和t-arm-elf中可以看出,不同的--target也影響gcc連接C語言?
庫,t-linux(--target=arm-linux)默認使用Glibc,-arm-elf(--target=arm-elf)使用?
- Dinhibit_libc禁止連接Glibc,這時我們就可以使用newlib等其他C語言庫編譯GCC工 具鏈。?
雖然GCC工具鏈配置了不同的的C語言庫,但由于這些C語言庫都可以用來支持GCC,它們?
對核心數據的處理上不存在較大出入。因而arm-linux-* 和 arm-elf-*區別主要表現在?
C語言庫的實現上,例如不同系統調用,不同的函數集實現,不同的ABI\啟動代碼以及?
不同系統特性等微小的差別。?
arm-linux-*和 arm-elf-*的使用沒有一個絕對的標準,排除不同庫實現的差異,gcc可?
以編譯任何系統。arm-linux-*和 arm-elf-*都可以用來編譯裸機程序和操作系統,只?
是在遵循下面的描述時系統程序顯得更加協調:?
arm-linux-*針對運行linux的ARM機器,其依賴于指定的C語言庫Glibc,因為同樣使用?
Glibc的linux而使得arm-linux-*在運行linux的ARM機器上編譯顯得更加和諧。?
arm-elf-*則是一個獨立的編譯體系,不依賴于指定的C語言庫Glibc,可以使用newlib?
等其他C語言庫,不要求操作系統支持,當其使用為嵌入式系統而設計的一些輕巧的C語?
言庫時編譯裸機程序(沒有linux等大型操作系統的程序),如監控程序,bootloader等?
能使得系統程序更加小巧快捷。

arm-linux-eabi 和arm-none-eabi

?

arm-linux-eabi?用于編譯?armlinux 代碼

arm-none-eabi 不指名操作系統,可以是linux, 也可以是vxworks等,arm-none-eabi 不包含 __linux__ 等特定宏,所以往往編譯linux 內核的時候通不過。

總結

以上是生活随笔為你收集整理的linux下不同arm 编译器的异同的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。