交叉編譯的基本概念

  在一種計算機環境中運行的編譯程序,能編譯出在另一種環境下運行的代碼,咱們就稱這種編譯器支持交叉編譯。這個編譯過程就叫交叉編譯。簡單地說, 就是在一個平臺上生成另外一個平臺上的可執行代碼。這裏須要注意的是所謂平臺,實際上包含兩個概念:體系結構(Architecture)、操做系統 (Operating System)。同一個體系結構能夠運行不一樣的操做系統;一樣,同一個操做系統也能夠在不一樣的體系結構上運行。舉例來講,咱們常說的x86 Linux平臺其實是Intel x86體系結構和Linux for x86操做系統的統稱;而x86 WinNT平臺其實是Intel x86體系結構和Windows NT for x86操做系統的簡稱。linux

  有時是由於目的平臺上不容許或不可以安裝咱們所須要的編譯器,而咱們又須要這個編譯器的某些特徵;有時是由於目的平臺上的資源貧乏,沒法運行咱們所須要編譯器;有時又是由於目的平臺尚未創建,連操做系統都沒有,根本談不上運行什麼編譯器。工具

  交叉編譯這個概念的出現和流行是和嵌入式系統的普遍發展同步的。咱們經常使用的計算機軟件,都須要經過編譯的方式,把使用高級計算機語言編寫的代碼(比 如C代碼)編譯(compile)成計算機能夠識別和執行的二進制代碼。好比,咱們在Windows平臺上,可以使用Visual C++開發環境,編寫程序並編譯成可執行程序。這種方式下,咱們使用PC平臺上的Windows工具開發針對Windows自己的可執行程序,這種編譯過 程稱爲native compilation,中文可理解爲本機編譯。然而,在進行嵌入式系統的開發時,運行程序的目標平臺一般具備有限的存儲空間和運算能力,好比常見的 ARM 平臺,其通常的靜態存儲空間大概是16到32MB,而CPU的主頻大概在100MHz到500MHz之間。這種狀況下,在ARM平臺上進行本機編譯就不太 可能了,這是由於通常的編譯工具鏈(compilation tool chain)須要很大的存儲空間,並須要很強的CPU運算能力。爲了解決這個問題,交叉編譯工具就應運而生了。經過交叉編譯工具,咱們就能夠在CPU能力 很強、存儲控件足夠的主機平臺上(好比PC上)編譯出針對其餘平臺的可執行程序。 操作系統

要進行交叉編譯,咱們須要在主機平臺上安裝對應的交叉編譯工具鏈(cross compilation tool chain),而後用這個交叉編譯工具鏈編譯咱們的源代碼,最終生成可在目標平臺上運行的代碼。資源

常見的交叉編譯例子以下:開發

一、在Windows PC上,利用ADS(ARM 開發環境),使用armcc編譯器,則可編譯出針對ARM CPU的可執行代碼。編譯器

二、在Linux PC上,利用arm-linux-gcc編譯器,可編譯出針對Linux ARM平臺的可執行代碼。同步

三、在Windows PC上,利用cygwin環境,運行arm-elf-gcc編譯器,可編譯出針對ARM CPU的可執行代碼。it

相關文章
相關標籤/搜索