llvm有binutils吗?

时间:2011-03-08 21:31:51

标签: gcc compiler-construction llvm binutils

LLVM编译器工具链有一个与普通gcc兼容的gcc。使用llvm-gcc的优点是可以进入任意目标,这意味着当你尝试编译为随机架构时,正常的gcc会说没有这样的目标,比如mips-apple-darwin。但是,llvm-gcc实际上会在mips处理器上为Mac OS X构建一个编译器。

然而,这是一个问题:要构建一个随机目标,你需要为该目标构建的binutils。因此,如果你有一个llvm会编译到但binutils不能编译的目标,那么你就无法编译,因为GNU Binutils不支持该目标。

所以...这就是问题:是否存在与GNU Binutils兼容的llvm-gcc等效的llvm-binutils? (意思是构建到任意目标的目标,而不是列表中的目标。)

编辑:

任意,我的意思是当我运行llvm-gcc时我不选择目标,我在编译llvm-gcc时选择目标。含义:如果我尝试为mips-apple-darwin编译GCC,我会得到一个不受支持的目标。但是,如果我为mips-apple-darwin构建llvm-gcc,只要我有mips-apple-darwin-as和mips-apple-darwin-ld就可以工作。

2 个答案:

答案 0 :(得分:2)

据我所知,LLVM不会为任意目标编译。您必须具有适合您的目标的所有包含和定义,并且通常,llvm具有后端以为您的目标生成代码。阅读“我可以将C或C ++代码编译为与平台无关的LLVM bitcode吗?”来自http://llvm.org/docs/FAQ.html

要回答这个问题,llvm不使用GNU binutils,llvm有自己的'binutils'来生成代码(称为LLVM核心项目)。反汇编程序和调试程序是LLDB项目的一部分。

LLVM带来一些独立性,它在语言层面上。您的项目可以使用C / C ++,Ada,Fortran等进行编码...... llvm可以在中间表示中转换代码。 IR最终将生成代码。

答案 1 :(得分:1)

llvm-gcc不支持任意目标。 llvm-gcc必须专门为任何给定目标构建。 clang + LLVM可以。我正试图用ellcc做到这一点:http://ellcc.org。我正在使用binutils进行组装和链接。