2011-11-24 71 views
12

安裝在fedora 16上的gcc是否可以針對不同的CPU進行交叉編譯,比如說SPARC? 我有一定的理解,如果我錯了,需要一些專家來糾正我。不同的操作系統因其訪問內核所使用的系統調用或完全由其使用的內核而異。它是否正確?不同的內核瞭解訪問底層硬件的不同系統調用。二進制文件或可執行文件或程序只不過是一堆系統調用而已。因此每個OS都有自己的可執行文件。一個可執行文件意味着在Windows上運行,而不是在Linux上運行。通過交叉編譯任何windown可執行文件的源代碼,我們可以爲其他操作系統生成可執行文件。 word PLATFORM是指操作系統。 POSIX是類UNIX操作系統的某些設計標準。 我們通常針對不同的操作系統進行交叉編譯。但是我們可以爲不同的硬件交叉編譯嗎?例如,在沒有OS的微控制器的情況下?可以通過gcc針對不同的CPU交叉編譯?

+0

上一次我需要一個交叉編譯器時,我發現本指南很有用:http://linux.bytesex.org/cross-compiler.html – sarnold

+0

@Saurabh:我寫了一個關於獲取交叉編譯器的小教程Sparc並在Qemu模擬器上運行可執行文件。你可能會覺得它很有用。 :https://www.ee.iitb.ac.in/course/~nehak/SparcQemu.html –

回答

11

不可以。您不能使用本機(x86)gcc編譯不同架構的程序文件。爲此,你需要一個特定於該處理器體系結構的交叉編譯器-gcc。

您對OS系統調用的理解是正確的。每個操作系統都有自己的一套系統調用,庫被使用。最後這些庫將被翻譯成處理器的機器語言。

每個處理器架構都有自己的指令集架構(ISA)指令集。因此,當用高級語言(如C)編寫的程序被編譯時,它應該從它的ISA轉換成機器語言。這項工作是由編譯器(gcc)完成的。編譯器將只針對一個處理器架構。例如gcc用於x86處理器。所以如果你想在你的x86機器上爲不同的處理器編譯一個編譯器,你應該選擇一個該處理器的交叉編譯器。

2

你將不得不建立這樣一個版本。這是將gcc移植到新平臺的過程的一部分。您可以構建交叉編譯的版本,然後交叉編譯該版本,然後在新平臺上測試該版本,進行調試,清洗並重復。

+0

您的意思是說我只能在我的英特爾機器上構建gcc-SPARC版本。但只能在SPARC上運行和測試它? – KawaiKx

+0

@Saurabh不,我不是故意這麼說。我的意思是說我確實說了些什麼。您可以爲Intel上的SPARC構建交叉編譯器,在Intel上運行它,使用它進行自我編譯,然後在SPARC上運行結果。 – EJP

+0

o.k ..所以我可以在我的intel機器上爲不同的CPU構建,安裝和運行編譯器。唯一的問題是,輸出只能在目標CPU上運行和測試,這非常符合邏輯。感謝您的時間和耐心。 – KawaiKx