【问题标题】:Status of machine code generation in LLVM?LLVM 中机器代码生成的状态?
【发布时间】:2012-04-25 00:14:34
【问题描述】:
最近我一直在研究 LLVM 作为编译器项目的后端,这看起来很有希望。
但是,LLVM 似乎可以 JIT 代码(这非常酷!)或者它可以为本地平台导出程序集,但它实际上不能创建本地可执行文件。这似乎是 LLVM 声称的编译器后端基础架构的主要限制。
我正在从事一个项目,我希望编译的可执行文件能够在没有安装 LLVM 的情况下运行(即没有 JIT)。 LLVM 是否有任何本机汇编器可用于生成机器码(不是 LLVM 位码)?
【问题讨论】:
标签:
compiler-construction
llvm
【解决方案1】:
LLVM(通过您提到的 MC 库)可以为流行的架构(x86 可以说是最成熟的)生成目标文件。这是一个相对较新的进步——在 MC 之前,LLVM 没有功能汇编器。确保使用最新发布的 LLVM 版本(目前是 3.0,但很快就会是 3.1)。
此时 LLVM 的功能停止。然后,您需要一个平台链接器将目标文件实际链接到可执行文件中。例如,ld 用于 Linux 平台。
请注意,这在今天(2012 年 4 月)是正确的,但在未来不太可能如此。 LLD (LLVM Linker) 项目现在处于早期阶段,旨在提供一个基于 LLVM 的链接器,它将跳过直接使用 LLVM 工具生成完全可加载的可执行文件(和共享库)所需的额外步骤,而无需依赖外部工具。