来自LLVM的二进制代码
问题描述:
如何从LLVM的C++端生成可执行的二进制文件?来自LLVM的二进制代码
我目前正在编写一个玩具编译器,我不太清楚如何从IR创建可执行文件的最后一步。
我目前看到的唯一解决方案是写出位码,然后使用system
或类似的方法调用llc。有没有办法从c + +接口做到这一点?
这似乎是一个常见问题,但我找不到任何东西。
答
LLVM不提供执行此任务所需的链接器。它只能写成汇编器,然后调用系统链接器来处理它。你可以看到llvm-ld
的源代码,看看它是如何完成的。
谢谢,llvm-ld代码正是我所需要的。 – cobbal 2011-12-28 03:24:15
如果您阅读llvm-ld的文档,它会说它的输出仍然是字节码,而不是本地二进制文件。它输出的字节码实际上是链接的,因为所有输入都存在于输出中。为了充当LD的替代品,llvm-ld必须生成通常的a.out文件,但它也不是本机可执行文件。它是一个shell脚本,它调用LLVM的lli实用程序,然后执行字节码(通过其解释器或通过JIT编译)。如果你真的想要一个可执行文件,你最终必须编译你的LLVM IR或字节码到汇编中,并通过gcc运行它。 – mgadda 2012-02-13 02:16:51