我瞭解什麼是交叉編譯器,以及它們爲什麼被使用。但在一次採訪中,有人問我,跨編譯器與普通編譯器有什麼不同。我告訴了他們交叉編譯器的目的。另外,它們的內存映射也會不同。但這個人似乎並不相信。任何人都可以告訴我與普通編譯器的基本區別嗎?交叉編譯器
交叉編譯器
回答
正常的編譯器可以是交叉編譯器。以GCC爲例。
從Wikipedia報價:
GCC的 編譯器免費軟件集合,可以設置交叉編譯 。它支持多種平臺 和語言。然而,由於有限的 志願者的時間,它需要保持工作 交叉編譯器,在許多版本 工作的大量交叉編譯器的一些 是 壞了。[來源請求]
GCC需要編譯 binutils的副本可用於每個 目標平臺。尤其是 重要的是GNU彙編程序。 因此,binutils首先必須 與開關 正確編譯--target = some-target發送到配置腳本。海灣合作委員會也必須是 配置相同的 - 目標 選項。然後,GCC可以正常運行 ,前提條件是 路徑中提供了binutils創建的工具。
交叉編譯器是能夠爲 創建可執行代碼比在其上運行編譯器的一個其它的平臺的編譯器。 Cross 編譯器工具用於爲嵌入式系統或多個平臺生成可執行文件。它被用來編譯一個平臺,在這個平臺上編譯不可行,就像不支持操作系統的微控制器一樣。使用這個 工具進行半虛擬化的情況已經變得更加普遍,其中系統可能有一個或多個 平臺在使用。 - WIKI
根據一些消息來源你不能只是說Java(或任何其他人使用的運行環境或虛擬機)的交叉編譯器。
真正的交叉編譯器可以針對來自一個源代碼的許多平臺。但你可能必須分別構建它們中的每一個
主要區別在於,使用「正常編譯器」,您可以在編譯它的機器上運行編譯的可執行文件。使用交叉編譯器,您必須將其上傳到系統,然後使用其目標平臺以某種方式運行它並查看它是否有效。 (或使用某種模擬器或虛擬機)。
這是唯一的巨大差異,真的。它在編輯 - 編譯 - 調試周期中增加了一兩個步驟。這可能有點痛苦。再次,通常交叉編譯器用於實時或嵌入式系統,其中可能由錯誤導致的系統崩潰。如果發生這種情況,您將需要等待重新啓動並重新啓動編輯器,將工作文件重新加載到您的編輯器中,這會使更多難以在您的開發系統上運行。
一些交叉編譯器具有可插入的代碼生成器,因此您只需指明您想要生成的代碼類型,並且它們將查找適當的生成器併爲您指定的目標調用適當的彙編器。不過,大多數情況下,編譯器是一個編譯器;他們都做同樣的事情。
我認爲交叉編譯器使用不同的彙編語言代碼。例如,i366和arm使用不同的彙編語言代碼。
- 1. 編譯警告 - ARM交叉編譯器
- 2. 交叉編譯器d-bus
- 3. cuda nvcc交叉編譯器
- 4. 哪個交叉編譯器?
- 5. Qt交叉編譯
- 6. 交叉編譯ldd
- 7. Beaglebone交叉編譯
- 8. Qt - 交叉編譯
- 9. Android交叉編譯
- 10. 交叉編譯libSDL
- 11. ARM交叉編譯
- 12. cmake交叉編譯
- 13. qt交叉編譯
- 14. Microblaze交叉編譯
- 15. QTcreator交叉編譯
- 16. 交叉編譯stunnel
- 17. 交叉編譯QT
- 18. 交叉編譯php
- 19. 編譯GMP的交叉編譯問題
- 20. 爲arm編譯交叉編譯e2fsprogs
- 21. 如何安裝gcc交叉編譯器
- 22. OpenSPARC T1平臺的交叉編譯器?
- 23. android AOSP交叉編譯器混淆
- 24. 多平臺C++交叉編譯器
- 25. 構建一個交叉編譯器
- 26. pthread_equal()替代powerpc交叉編譯器?
- 27. 交叉編譯器的Mac OS X
- 28. 去交叉編譯器失敗
- 29. 爲mips處理器交叉編譯opencv
- 30. Objective-C到Java交叉編譯器
你認爲目的是什麼? – mkb 2010-12-01 14:03:50
無論你的答案是什麼,一些採訪者擅長於保持沉默。也許你確實說服了他,但他不想對你的回答作出強烈反應。 – 2010-12-01 14:05:49
對於這種情況,一個好的提示是問他們相信答案是什麼。即使你沒有得到這份工作,你也會學到新的東西。在面試中被問及多線程時,我也遇到過類似的情況。多線程非常非常使用,通常是不必要的。面試官問什麼時候會有用,我想不出一個很好的例子,問他同樣的問題。我沒有得到這份工作,但是我的確提高了編程知識,並獲得了非常好的答案。 – AlastairG 2010-12-01 14:08:47