如何从 C++ 程序调用 LLVM 代码并将数据传递给它

How to invoke LLVM code from a c++ program and pass data to it

我有一个可以在运行时生成 LLVM IR 的 c++ 程序。现在我想从我的 C++ 程序中将此 IR 编译成二进制文件并调用该二进制文件。同样在调用之前,我想将数据从我的 C++ 程序传递到生成的二进制文件。我是 LLVM 的新手,我找不到任何与此相关的文档。有人可以指出有关此的文档或让我知道如何完成此操作。

尽管您没有说明要如何调用发出的代码,但我会想到以下一般块和解决步骤,因此我假设您正在调用另一个可执行文件:

在你的可执行文件中

  1. 生成 LLVM IR(见下文)
  2. 调用,使用类似 system 的函数,clang 将从 LLVM IR 生成新的可执行程序。
  3. 如果编译成功,则使用类似system的函数调用新生成的可执行文件并将数据作为命令行参数传递。

LLVM IR 生成

  1. 在您生成的 IR 中,您需要发出一个 main 函数定义,该函数定义采用 argc and argv,因为这将消耗您发送的传递数据。
  2. main 正文中,您需要适当地处理命令行输入并调用您最初想要执行的代码。

但是:这有一些变化。例如,如果你想生成一个动态库,你可以省略 main 函数的生成,而是对你刚刚创建的动态库进行 运行 次加载并解析函数入口点。