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

时间:2016-10-13 05:27:20

标签: c++ llvm llvm-ir llvm-c++-api

我有一个可以在运行时生成LLVM IR的c ++程序。现在我想从我的c ++程序将这个IR编译成二进制文件并调用二进制文件。在调用之前,我想将数据从我的c ++程序传递给生成的二进制文件。我是LLVM的新手,我找不到任何关于此的文档。有人可以指出有关这方面的文档或让我知道如何做到这一点。

1 个答案:

答案 0 :(得分:1)

即使你没有说明你想如何调用发出的代码,我想到了一般的阻止和处理步骤,所以我假设它就像你在调用另一个可执行文件一样:

在您的可执行文件中

  1. 生成LLVM IR(见下文)
  2. 使用类似node server.js -w /home/workspace -l 0.0.0.0 -p 8081 -a username:password 的函数调用clang,它将从LLVM IR生成新的可执行程序。
  3. 如果编译成功,则使用类似system的函数调用新生成的可执行文件并将数据作为命令行参数传递。
  4. LLVM IR生成

    1. 在您正在生成的IR中,您需要发出system函数定义,该定义需要main,因为这将消耗您发送的传递数据。
    2. argc and argv正文中,您需要适当地处理命令行输入并调用您最初想要运用的代码。
    3. 但是:这有变化。例如,如果要生成动态库,可以省略main函数的生成,而是对刚刚创建的动态库进行运行时加载,并解析函数入口点。