交叉編譯器

交叉編譯器(英語:Cross compiler)是指一個在某個系統平台下可以產生另一個系統平台執行檔編譯器。交叉編譯器在目標系統平台(開發出來的應用程式序所執行的平台)難以或不容易編譯時非常有用。

交叉編譯器的存在對於從一個開發主機為多個平台編譯代碼是非常有必要的。直接在平台上編譯有時行不通,例如在一個嵌入式系統單晶片 ,因為它們沒有完整的現代作業系統環境,無法直接編譯。

交叉編譯器和原始碼至原始碼編譯器不同,交叉編譯器用於二進制代碼的跨平台軟體開發,而源到源編譯器是將某種程式語言的程式原始碼作為輸入,生成以另一種程式語言構成的等效原始碼的編譯器,但兩者都是編程工具

使用

交叉編譯器的基本用法就是將構建環境與目標環境分開。常在下面幾種情況中使用:

  • 嵌入式電腦。這種裝置的資源有限,舉例來說:微波爐有一個非常小的電腦來讀取其觸控板和門感測器,並向數字顯示器和揚聲器提供輸出,以控制用於烹飪食物。這台電腦不足以執行編譯器,檔案系統或開發環境,因為除錯和測試需要更多的嵌入式系統資源,使得在目標機上編譯變得更不可能。採用交叉編譯,在資源足夠的機器上完成構建工作,就可以解決這個問題。
  • 編譯多個目標庫。舉個例子,一個公司可能希望支援不同版本或不同種類的作業系統,有了交叉編譯,便可以為每個目標設定一個編譯環境進行編譯。如:在Windows中為底層構造完全不同的Linux編譯程式;在電腦上為行動端作業系統構建程式。
  • 在伺服器上編譯。類似於在多個機器進行編譯,一個複雜的編譯可能會涉及到許多的編譯操作,可以將這些編譯操作放到空閒的機器上執行,無論其底層硬體或其執行的作業系統版本如何。
  • 引導一個新平台Bootstrapping)。在為新平台開發軟體,或者開發/使用未來平台的仿真器時,則使用交叉編譯器來編譯必要的工具,如作業系統和本機編譯器。

程式虛擬機器(比如JVM)也借鑑了當初開發交叉編譯器的理念。它可以用同一份輸出在多個目標系統上執行,但是編譯後的代碼必須執行在虛擬機器上。

參見