我想構建一個gcc交叉編譯器。我知道在編譯交叉編譯器之前,我需要已經構建了目標binutils。爲什麼編譯器的構建需要目標binutils?編譯器本身只需要高級代碼並將其轉換爲我在編譯器源代碼中定義的程序集。那麼爲什麼我需要目標bintools來編譯交叉編譯器呢?它是在所有交叉編譯器文檔中編寫的,我需要在編譯交叉編譯器之前構建它們。 (例如,http://wiki.osdev.org/Building_GCC和http://www.ifp.illinois.edu/~nakazato/tips/xgcc.html)。gcc編譯器之前建立binutils
回答
你的關鍵的問題似乎是:
爲什麼編譯器的建設需要的目標binutils的?
如Building a cross compiler所描述的,用於GNU交叉編譯器生成過程的一部分是建立運行時庫用於使用新編譯的交叉編譯器的對象。所以目標的binutils
需要在那一步才能成功。
它可以有可能首先構建交叉編譯器,使用空文件binutils
組件的子集gcc
需要 - 例如as
和ld
和ar
和ranlib
- 然後構建和安裝目標binutils
組件到適當的位置,然後構建目標運行時庫。
但它會更不容易出錯做事以下方式(以及文檔建議此):目標打造binutils
首先,放置在gcc
的源代碼樹中指定的可執行文件,然後構建交叉編譯器。
GCC需要一個彙編程序將其生成的程序集轉換爲目標文件(機器代碼),以及將目標文件鏈接在一起以生成可執行文件和共享庫的鏈接程序。它還需要一個存檔器來生成靜態庫/檔案。 GNU彙編as
,接頭ld
和ar
歸檔:
這三個通常由binutils包(除其他有用的工具)提供。
Binutils的(二進制工具)提供low-level handling of binary files
,如linking
,assembling
,和parsing ELF files
。 GCC 編譯器依賴於這些工具來創建executable
,因爲它會生成 binutils組裝成可執行映像的目標文件。
ELF是Linux用於二進制可執行文件 文件的格式。 GCC
編譯器依賴於binutils
來提供大部分的platform-specific functionality
。
在這裏,您正在交叉編譯的其他一些架構不適用於x86。所以產生的binutils是platform-specific
而配置必須給--host!=目標。即--host = i686-pc-linux-gnu 其中--target = arm-none-linux-gnueabi。 因此生成的可執行文件與主機已經有binutils不一樣。
另外 基本的東西需要知道。
build machine
,其中構建了工具鏈。
host machine
,其中工具鏈將被執行。
target machine
,其中執行由 工具鏈創建的二進制文件。
因此,binutils將擁有工具來生成和操作給定CPU架構的二進制文件 。不爲一臺主機使用
我想你誤解了我 - 爲什麼我需要目標bintools才能編譯交叉編譯器? – yehudahs
- 1. Binutils在構建GCC交叉編譯器時無法構建
- 2. 更改gcc/binutils - 前綴
- 3. GCC&binutils構建 - C編譯器無法創建可執行文件
- 4. 無法建立的binutils我的交叉編譯
- 5. 編譯編譯器錯誤編譯GCC
- 6. Windows GCC和MSVC編譯器之間的編譯時間比較
- 7. 獨立的GCC編譯工具庫
- 8. 使用GCC編譯爲獨立環境
- 9. GCC VS MSVS編譯器
- 10. Android GCC編譯器更改
- 11. GCC編譯器問題
- 12. GNU GCC編譯器更新
- 13. GCC編譯器錯誤
- 14. 找不到gcc編譯器
- 15. Eclipse Juno - GCC編譯器pthread
- 16. OIS GCC編譯器錯誤
- 17. GCC編譯器錯誤
- 18. 舊的gcc編譯器
- 19. 最小GCC C++編譯器
- 20. C89 vs c99 GCC編譯器
- 21. 使MSVC編譯器GCC complient?
- 22. GCC編譯器標誌「-DEVAL」
- 23. GCC編譯器的問題
- 24. 在binutils中編譯金時出錯
- 25. 在Ubuntu上交叉編譯Binutils
- 26. 編譯gcc-4.1
- 27. 錯誤:':'令牌之前的預期初始值設定項,gcc編譯器
- 28. GBA C編程編譯器gcc
- 29. LLVM 5.0編譯器是否等同於GCC編譯器?
- 30. 編譯器gcc編譯器標誌的文檔?
我正在編譯linux上的交叉編譯器,它將在linux上運行,但會爲其他機器(host!= linux)生成exe文件。所以當我編譯交叉編譯器時,我需要使用當前操作系統的as和ld。所以在我的理解中,爲了編譯交叉編譯器,我不需要主機binutils。每當我想爲主機編譯源代碼時,我只需要主機bintools,而不需要交叉編譯器的輸出,而必須使用主機的as和ld。所以我的問題是,爲什麼我在編譯交叉編譯器之前需要它們? – yehudahs
您至少需要彙編程序爲目標構建類似'crt * .o'的東西,並且可能還需要鏈接器(尤其是如果您要構建C++標準庫)。 – Mat
好吧,我明白,編譯目標的源時,我需要目標bintools,但它不回答問題,爲什麼我需要它們來構建交叉編譯器。我不打算在目標上運行交叉編譯器...我在主機上運行它,但是將它生成的exe文件運行到目標上....在上面的註釋中,當我寫主機時,我的意思是目標。 – yehudahs