7

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

然而,这里有一个问题:要构建到随机目标,您需要已经为该目标构建的 binutils。因此,如果您有一个 llvm 可以编译到但 binutils 不能编译的目标,那么您就无法制作编译器,因为 GNU Binutils 不支持该目标。

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

编辑:

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

4

2 回答 2

4

据我所知,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 最终将生成代码。

于 2011-03-09T07:39:39.393 回答
2

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

于 2011-03-10T03:22:28.717 回答