2011-03-08 63 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进行组装和链接。