Leo*_*zen 7 compiler-construction gcc llvm binutils
LLVM 编译器工具链有一个与普通 gcc 兼容的 gcc。使用 llvm-gcc 的优点是可以访问任意目标,这意味着当您尝试编译为随机架构时,正常的 gcc 会说没有这样的目标,比如 mips-apple-darwin。然而,llvm-gcc 实际上会在 mips 处理器上为 Mac OS X 构建一个编译器。
然而,这里有一个问题:要构建到随机目标,您需要已经为该目标构建的 binutils。因此,如果您有一个 llvm 可以编译到但 binutils 不能编译的目标,那么您就不能制作编译器,因为 GNU Binutils 不支持该目标。
所以......问题是:是否有类似 llvm-gcc 的等效 llvm-binutils 与 GNU Binutils 兼容?(意味着构建到任意目标的目标,而不是列表中的目标。)
编辑:
通过任意,我的意思是我在运行 llvm-gcc 时不选择目标,而是在编译 llvm-gcc 时选择目标。含义:如果我尝试为 mips-apple-darwin 编译 GCC,则会得到不支持的目标。但是如果我为 mips-apple-darwin 构建 llvm-gcc,只要我有 mips-apple-darwin-as 和 mips-apple-darwin-ld,它就可以工作。
据我所知,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 最终将生成代码。
| 归档时间: |
|
| 查看次数: |
4258 次 |
| 最近记录: |