compiler-construction - LLVM 中机器码生成的状态?

标签 compiler-construction llvm

最近我一直在研究 LLVM 作为编译器项目的后端,这看起来非常有前途。

然而,LLVM 似乎可以 JIT 代码(这很酷!)或者它可以为 native 平台导出程序集,但它实际上不能创建 native 可执行文件。这似乎是 LLVM 声称的编译器后端基础设施的主要限制。

我正在开发一个项目,我希望编译后的可执行文件能够在没有安装 LLVM 的情况下运行(即没有 JIT)。 LLVM 是否有任何可用于生成机器代码(不是 LLVM 位码)的 native 汇编程序?

最佳答案

LLVM(通过您提到的 MC 库)可以为流行的体系结构(x86 可以说是最成熟的)生成目标文件。这是一个相对较新的进步——在 MC 之前,LLVM 没有功能性汇编器。确保使用最新发布的 LLVM 版本(目前是 3.0,但很快就会是 3.1)。

此时 LLVM 的功能停止了。然后,您将需要一个平台链接器来将目标文件实际链接到可执行文件中。例如,ld在 Linux-y 平台上使用。

请注意,这在今天(2012 年 4 月)中是正确的,但在 future 不太可能正确。 LLD(LLVM 链接器)项目现在处于早期阶段,旨在提供一个基于 LLVM 的链接器,该链接器将跳过直接使用 LLVM 工具生成完全可加载的可执行文件(和共享库)所需的额外步骤,而无需依赖外部工具。

关于compiler-construction - LLVM 中机器码生成的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307746/

相关文章:

c - 编译 .c 代码时未声明 socklen_t

compiler-construction - ANTLR4 中的 EOF 行为

linux - 使用非 gcc 编译 linux 内核

build - 我可以在没有 Python 解释器的情况下构建 LLVM 吗?

c - 如何使 clang 编译为 llvm IR

c++ - Bison 移位/减少冲突无法解决

c++ - 为什么这个 C++ 程序如此之快?

c++ - 在 Windows 上构建 LLVM 示例时缺少 CoTaskMemFree

c - 防止 "ld -wrap "循环引用

c++ - LLVM 引用了一个不存在的 header