什麼是交叉編譯?為什麼要使用交叉編譯?

2021-08-27 07:20:37 字數 1696 閱讀 2934

在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的**,我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說, 就是在乙個平台上生成另乙個平台上的可執行**。這裡需要注意的是所謂平台,實際上包含兩個概念:體系結構(architecture)、作業系統 (operating system)。同乙個體系結構可以執行不同的作業系統;同樣,同乙個作業系統也可以在不同的體系結構上執行。舉例來說,我們常說的x86 linux平台實際上是intel x86體系結構和linux for x86作業系統的統稱;而x86 winnt平台實際上是intel x86體系結構和windows nt for x86作業系統的簡稱。

有時是因為目的平台上不允許或不能夠安裝我們所需要的編譯器,而我們又需要這個編譯器的某些特徵;有時是因為目的平台上的資源貧乏,無法執行我們所 需要編譯器;有時又是因為目的平台還沒有建立,連作業系統都沒有,根本談不上執行什麼編譯器。

交叉編譯這個概念的出現和流行是和嵌入式系統的廣泛發展同步的。我們常用的計算機軟體,都需要通過編譯的方式,把使用高階計算機語言編寫的**(比 如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),然後用這個交叉編譯工具鏈編譯我們的源**,最終生成可在目標平台上執行的**。常見的交叉編譯例子如下:

1、在windows pc上,利用ads(arm 開發環境),使用armcc編譯器,則可編譯出針對arm cpu的可執行**。

2、在linux pc上,利用arm-linux-gcc編譯器,可編譯出針對linux arm平台的可執行**。

3、在windows pc上,利用cygwin環境,執行arm-elf-gcc編譯器,可編譯出針對arm cpu的可執行**。

乙個經常會被問到的問題就是,「既然我們已經有了主機編譯器,那為什麼還要交叉編譯呢?」其實答案很簡單,沒辦法啊!有時是因為目的平台上不允許或不能夠 安裝我們所需要的編譯器,而我們又需要這個編譯器的某些特徵;有時是因為目的平台上的資源貧乏,無法執行我們所需要編譯器;有時又是因為目的平台還沒有建 立,連作業系統都沒有,根本談不上執行什麼編譯器。

另乙個經常會被問到的問題就是:「既然可以交叉編譯,那還要主機編譯幹嗎?」其實答案也很簡 單,交叉編譯是不得已而為之!與主機編譯相比,交叉編譯受的限制更多,雖然在理論上我們可以做任何形式的交叉編譯,但事實上,由於受到專利、版權、技術的 限制,並不總是能夠進行交叉編譯,尤其是在業餘條件下!舉例來說,我們至今無法生成惠普公司專有的som格式的可執行檔案,因此我們根本無法做目的平台為 hppa-hpux的交叉編譯。

什麼是交叉編譯,為什麼要使用交叉編譯

一 什麼是交叉編譯 在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的 我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說,就是在乙個平台上生成另乙個平台上的可執行 這裡需要注意的是所謂平台,實際上包含兩個概念 體系結構 architecture 作業系統 operat...

什麼是交叉編譯,為什麼要使用交叉編譯?

一 什麼是交叉編譯 在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的 我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說,就是在乙個平台上生成另乙個平台上的可執行 這裡需要注意的是所謂平台,實際上包含兩個概念 體系結構 architecture 作業系統 operat...

什麼是交叉編譯,為什麼要使用交叉編譯

一 什麼是交叉編譯 在一種計算機環境中執行的編譯程式,能編譯出在另外一種環境下執行的 我們就稱這種編譯器支援交叉編譯。這個編譯過程就叫交叉編譯。簡單地說,就是在乙個平台上生成另乙個平台上的可執行 這裡需要注意的是所謂平台,實際上包含兩個概念 體系結構 architecture 作業系統 operat...