如何从 C++ 程序调用 LLVM 代码并将数据传递给它
How to invoke LLVM code from a c++ program and pass data to it
我有一个可以在运行时生成 LLVM IR 的 c++ 程序。现在我想从我的 C++ 程序中将此 IR 编译成二进制文件并调用该二进制文件。同样在调用之前,我想将数据从我的 C++ 程序传递到生成的二进制文件。我是 LLVM 的新手,我找不到任何与此相关的文档。有人可以指出有关此的文档或让我知道如何完成此操作。
尽管您没有说明要如何调用发出的代码,但我会想到以下一般块和解决步骤,因此我假设您正在调用另一个可执行文件:
在你的可执行文件中
- 生成 LLVM IR(见下文)
- 调用,使用类似
system
的函数,clang 将从 LLVM IR 生成新的可执行程序。
- 如果编译成功,则使用类似
system
的函数调用新生成的可执行文件并将数据作为命令行参数传递。
LLVM IR 生成
- 在您生成的 IR 中,您需要发出一个
main
函数定义,该函数定义采用 argc and argv
,因为这将消耗您发送的传递数据。
- 在
main
正文中,您需要适当地处理命令行输入并调用您最初想要执行的代码。
但是:这有一些变化。例如,如果你想生成一个动态库,你可以省略 main
函数的生成,而是对你刚刚创建的动态库进行 运行 次加载并解析函数入口点。
我有一个可以在运行时生成 LLVM IR 的 c++ 程序。现在我想从我的 C++ 程序中将此 IR 编译成二进制文件并调用该二进制文件。同样在调用之前,我想将数据从我的 C++ 程序传递到生成的二进制文件。我是 LLVM 的新手,我找不到任何与此相关的文档。有人可以指出有关此的文档或让我知道如何完成此操作。
尽管您没有说明要如何调用发出的代码,但我会想到以下一般块和解决步骤,因此我假设您正在调用另一个可执行文件:
在你的可执行文件中
- 生成 LLVM IR(见下文)
- 调用,使用类似
system
的函数,clang 将从 LLVM IR 生成新的可执行程序。 - 如果编译成功,则使用类似
system
的函数调用新生成的可执行文件并将数据作为命令行参数传递。
LLVM IR 生成
- 在您生成的 IR 中,您需要发出一个
main
函数定义,该函数定义采用argc and argv
,因为这将消耗您发送的传递数据。 - 在
main
正文中,您需要适当地处理命令行输入并调用您最初想要执行的代码。
但是:这有一些变化。例如,如果你想生成一个动态库,你可以省略 main
函数的生成,而是对你刚刚创建的动态库进行 运行 次加载并解析函数入口点。