2008-12-23 123 views
5

我正在研究使用arm-linux-xxx構建內核的uClinux系統,但使用arm-elf-xxx構建了用戶應用程序。arm-linux-gcc vs arm-elf-gcc

如果應用程序打算在Linux上運行,用arm-linux-xxx構建所有東西不是更好嗎?

在uClinux的整體配置中,在哪裏設置該選項?

+0

是ARM-Linux的*和手臂,elf- *符號鏈接到其它應用程序?例如,我的系統上,在arm-linux的-GCC點爲arm-未知的Linux uclibceabi-GCC。 – ctuffli 2009-01-19 14:52:02

回答

0

ELF是二進制格式linux and many others使用:

ELF格式取代了舊的 可執行文件格式,如a.out的和 COFF在許多類似Unix的操作系統 系統如Linux,Solaris和IRIX , FreeBSD,NetBSD,OpenBSD,DragonFly BSD,Syllable和HP-UX(除了 32位PA-RISC程序,其繼續使用 以使用SOM)。 ELF還出現了一些 採用在非Unix操作系統 系統,如安騰版本的OpenVMS的 ,和BeOS的修訂4和 後來用於基於x86計算機(其中 它取代了可移植可執行 格式; PowerPC的版本住具有首選可執行格式的 )。 PlayStation Portable,PlayStation 2, PlayStation 3,Wii和GP2X遊戲機 也使用ELF。 AmigaOS 4和MorphOS 也在PowerPC機器上運行,使用 ELF。在Amiga平臺上,ELF 可執行文件替代了之前在配備PPC 處理器擴展卡的Amigas上使用的 EHF(Extended Hunk Format)。 Symbian vOS v9使用基於ELF文件格式的E32Image [3]格式,即 。

大多數索尼愛立信(例如, W800i,W610,K790,等),一些西門子 (SGOLD和SGOLD2平臺:從 西門子C65至S75和明基西門子 E71/EL71)以及摩托羅拉(例如, 的E398,SLVR L7,V360,V3I和所有 電話LTE2它有補丁應用) 電話可以通過 使用補丁,增加了彙編代碼 到主固件(被稱爲運行ELF文件在地下改裝 文化)。

0

我似乎記得在某些時候,那中間的位並不重要。如前所述,elf是標準的文件格式,無論如何你都要使用它,並且無論如何都會得到獨立於二進制名稱的文件格式。什麼可能(或不是)更重要的是調用約定,我不知道是否在調用共享庫函數時必須使調用約定匹配,或者如果在別處處理它。

2

編譯器的名稱並不一定意味着什麼。取決於編譯器的構建者(並將其命名),您將得到不同的結果。可以說,對於特定的配置有一個正確的名稱,但是一些隨機編譯的gcc可能不正確。

對於CodeSourcery編譯器(可能是最正確的名稱),請參閱their platforms page以瞭解它們的命名含義。

0

區別在於arm-elf-xxx工具鏈的鏈接輸出是一個linux可加載的二進制文件,而arm-linux-xxx輸出一個內核對象(ko),它是一個具有自己鏈接格式的blob模塊)或主內核本身,它不需要打包格式。即,對於用戶空間,您希望最終的動態鏈接對象成爲ELF可執行文件,庫或共享對象。對於內核空間,您希望最終對象(內核或模塊)處於linux-arm-kernel鏈接格式。

你會發現,這兩個目標的中間對象(.o文件)可能是所有ELF,因爲這是工具鏈期待。

+0

這是非常錯誤的。對於內核和用戶空間構建,工具鏈(或者不需要*成爲一個)沒有區別。 – 2012-04-03 14:27:45

2

您可以運行arm-linux-gcc -varm-elf-gcc -v以查看這兩個gcc版本(如目標體系結構/語言)之間的一些差異。

0

在我們的例子中,我們建立的Linux使用SPARC-ELF-gcc和我們使用SPARC -..-的linux-GCC構建的busybox(appliation在Linux上運行)。我認爲這是正確的,而不是相反。

相關問題