Compiler construction LLVM中机器代码生成的状态?

Compiler construction LLVM中机器代码生成的状态?,compiler-construction,llvm,Compiler Construction,Llvm,最近,我一直在研究LLVM作为编译器项目的后端,它看起来非常有前途 然而,LLVM似乎可以JIT代码(这很酷!),或者可以为本机平台导出程序集,但它实际上不能创建本机可执行文件。这似乎是LLVM声称的编译器后端基础结构的一个主要限制 我正在进行一个项目,希望编译后的可执行文件能够在没有安装LLVM的情况下运行(即没有JIT)。LLVM是否有任何本机汇编程序可用于生成机器代码(而不是LLVM位代码)?LLVM(通过您提到的MC库)可以为流行的体系结构生成对象文件(x86可以说是最成熟的体系结构)。

最近,我一直在研究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链接器)项目目前处于早期阶段,旨在提供一个基于LLVM的链接器,该链接器将跳过直接使用LLVM工具生成可完全加载的可执行文件(和共享库)所需的额外步骤,而不依赖外部工具