2011-12-28 86 views
5

如何从LLVM的C++端生成可执行的二进制文件?来自LLVM的二进制代码

我目前正在编写一个玩具编译器,我不太清楚如何从IR创建可执行文件的最后一步。

我目前看到的唯一解决方案是写出位码,然后使用system或类似的方法调用llc。有没有办法从c + +接口做到这一点?

这似乎是一个常见问题,但我找不到任何东西。

回答

3

LLVM不提供执行此任务所需的链接器。它只能写成汇编器,然后调用系统链接器来处理它。你可以看到llvm-ld的源代码,看看它是如何完成的。

+0

谢谢,llvm-ld代码正是我所需要的。 – cobbal 2011-12-28 03:24:15

+1

如果您阅读llvm-ld的文档,它会说它的输出仍然是字节码,而不是本地二进制文件。它输出的字节码实际上是链接的,因为所有输入都存在于输出中。为了充当LD的替代品,llvm-ld必须生成通常的a.out文件,但它也不是本机可执行文件。它是一个shell脚本,它调用LLVM的lli实用程序,然后执行字节码(通过其解释器或通过JIT编译)。如果你真的想要一个可执行文件,你最终必须编译你的LLVM IR或字节码到汇编中,并通过gcc运行它。 – mgadda 2012-02-13 02:16:51