2011-03-08 64 views
4

LLVM編譯器工具鏈具有與正常gcc兼容的gcc。使用llvm-gcc的好處是可以轉到任意目標,這意味着當你嘗試編譯爲隨機體系結構時,正常的gcc將不會說這樣的目標,比如mips-apple-darwin。但是,llvm-gcc實際上將在mips處理器上爲Mac OS X構建編譯器。llvm是否有binutils?

但是,這裏有一個問題:要建立一個隨機目標,你需要爲該目標建立的binutils。所以如果你有一個目標llvm會編譯,但binutils不能,那麼你不能編譯,因爲GNU Binutils不支持該目標。

所以...這裏的問題:是否有一個等效的llvm-binutils像一個與GNU Binutils兼容的llvm-gcc? (從列表意味着一個建立到任意的目標,而不是一個。)

編輯:

通過任意的,我的意思是我不挑的目標,當我運行LLVM-GCC,我挑的目標當我編譯llvm-gcc時。含義:如果我嘗試爲mips-apple-darwin編譯GCC,我得到一個不支持的目標。但是如果我爲mips-apple-darwin構建llvm-gcc,只要我有mips-apple-darwin-as和mips-apple-darwin-ld,它就會工作。

+0

注意:LLVM 2.9在軌道上,它應該是支持llvm-gcc的最後一個版本。從3.0開始,LLVM將使用CLang或Dragon Egg。 – 2011-03-09 12:29:04

回答

2

據我所知,LLVM不會針對任意目標進行編譯。您必須擁有所有包含和定義才能符合您的目標,並且通常,llvm有一個後端爲您的目標生成代碼。閱讀「我可以將C或C++代碼編譯爲與平臺無關的LLVM位代碼嗎?」從http://llvm.org/docs/FAQ.html

要回答這個問題,llvm不使用GNU binutils,llvm有自己的'binutils'來生成代碼(稱爲LLVM核心項目)。反彙編器和調試器是LLDB項目的一部分。

LLVM帶來了一定的獨立性,它在語言層面上。您的項目可以使用C/C++,Ada,Fortran等進行編碼...... llvm具有以中間表示形式轉換代碼的功能。該IR最終會生成代碼。

1

llvm-gcc不支持任意目標。 llvm-gcc必須專門爲任何給定的目標而構建。鏗鏘+ LLVM可以。我試圖用ellcc來完成這個工作:http://ellcc.org。我正在使用binutils進行組裝和鏈接。