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