LLVM的二进制生成

cob*_*bal 6 c++ llvm

如何从LLVM的c ++端生成可执行二进制文件?

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

我目前看到的唯一解决方案是写出bitcode,然后使用system等来调用llc .有没有办法从c ++界面执行此操作?

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

Pup*_*ppy 4

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

  • 如果您阅读 llvm-ld 的文档,它会说它的输出仍然是字节码,而不是本机二进制文件。它输出的字节码确实是链接的,因为所有输入都存在于输出中。为了替代 ld,llvm-ld 必须生成通常的 a.out 文件,但它也不是本机可执行文件。它是一个 shell 脚本,调用 LLVM 的 lli 实用程序,然后执行字节码(通过其解释器或通过 JIT 编译)。如果您确实想要一个可执行文件,您最终必须将 LLVM IR 或字节码编译为程序集并通过 gcc 运行它。 (3认同)