2010-12-01 322 views
2

我瞭解什麼是交叉編譯器,以及它們爲什麼被使用。但在一次採訪中,有人問我,跨編譯器與普通編譯器有什麼不同。我告訴了他們交叉編譯器的目的。另外,它們的內存映射也會不同。但這個人似乎並不相信。任何人都可以告訴我與普通編譯器的基本區別嗎?交叉編譯器

+0

你認爲目的是什麼? – mkb 2010-12-01 14:03:50

+1

無論你的答案是什麼,一些採訪者擅長於保持沉默。也許你確實說服了他,但他不想對你的回答作出強烈反應。 – 2010-12-01 14:05:49

+0

對於這種情況,一個好的提示是問他們相信答案是什麼。即使你沒有得到這份工作,你也會學到新的東西。在面試中被問及多線程時,我也遇到過類似的情況。多線程非常非常使用,通常是不必要的。面試官問什麼時候會有用,我想不出一個很好的例子,問他同樣的問題。我沒有得到這份工作,但是我的確提高了編程知識,並獲得了非常好的答案。 – AlastairG 2010-12-01 14:08:47

回答

0

正常的編譯器可以是交叉編譯器。以GCC爲例。

Wikipedia報價:

GCC的 編譯器免費軟件集合,可以設置交叉編譯 。它支持多種平臺 和語言。然而,由於有限的 志願者的時間,它需要保持工作 交叉編譯器,在許多版本 工作的大量交叉編譯器的一些 是 壞了。[來源請求]

GCC需要編譯 binutils的副本可用於每個 目標平臺。尤其是 重要的是GNU彙編程序。 因此,binutils首先必須 與開關 正確編譯--target = some-target發送到配置腳本。海灣合作委員會也必須是 配置相同的 - 目標 選項。然後,GCC可以正常運行 ,前提條件是 路徑中提供了binutils創建的工具。

3

交叉編譯器是能夠爲 創建可執行代碼比在其上運行編譯器的一個其它的平臺的編譯器。 Cross 編譯器工具用於爲嵌入式系統或多個平臺生成可執行文件。它被用來編譯一個平臺,在這個平臺上編譯不可行,就像不支持操作系統的微控制器一樣。使用這個 工具進行半虛擬化的情況已經變得更加普遍,其中系統可能有一個或多個 平臺在使用。 - WIKI

根據一些消息來源你不能只是說Java(或任何其他人使用的運行環境或虛擬機)的交叉編譯器。

真正的交叉編譯器可以針對來自一個源代碼的許多平臺。但你可能必須分別構建它們中的每一個

0

主要區別在於,使用「正常編譯器」,您可以在編譯它的機器上運行編譯的可執行文件。使用交叉編譯器,您必須將其上傳到系統,然後使用其目標平臺以某種方式運行它並查看它是否有效。 (或使用某種模擬器或虛擬機)。

這是唯一的巨大差異,真的。它在編輯 - 編譯 - 調試周期中增加了一兩個步驟。這可能有點痛苦。再次,通常交叉編譯器用於實時或嵌入式系統,其中可能由錯誤導致的系統崩潰。如果發生這種情況,您將需要等待重新啓動並重新啓動編輯器,將工作文件重新加載到您的編輯器中,這會使更多難以在您的開發系統上運行。

0

一些交叉編譯器具有可插入的代碼生成器,因此您只需指明您想要生成的代碼類型,並且它們將查找適當的生成器併爲您指定的目標調用適當的彙編器。不過,大多數情況下,編譯器是一個編譯器;他們都做同樣的事情。

0

我認爲交叉編譯器使用不同的彙編語言代碼。例如,i366和arm使用不同的彙編語言代碼。