如果你的指标是运行 LLVM IR, 则不倡议写入文件, 因为 LLVM 提供了 JIT 的形式间接从 C++ 运行. 后续会有相干文章链接放在此处.
首先, 咱们必须有一个 LLVM Module 作为根底, 也就是生成 LLVM IR 的时候应用的 Module, 此处应用 theModule
作为例子.
查找 llvm/IR/Module.h
文件, 理解到 print
函数承受如下参数:
应用如下参数, 能够将后果输入到命令行, 即 stdout
或者 stderr
.
/* llvm ir -> stdout */
theModule->print(llvm::outs(), nullptr);
/* llvm ir -> stderr */
// llvm_module -> print(llvm::errs(), nullptr);
应用如下代码, 能够将后果输入到文件 output.ll
中:
std::error_code EC;
llvm::raw_fd_ostream output_stream(
"output.ll", /* file name */
EC,
llvm::sys::fs::OpenFlags::OF_None
);
if (EC) {std::cerr << "Can't open file output.ll; " << EC.message() << std::endl;
}
/* write to current_work_directory/output.ll */
theModule->print(output_stream, nullptr);
输入的文件关上后为人类可读代码, 能够应用 lli
工具执行, 在此咱们应用 C++ 的 system
函数:
int lli_result = std::system("lli output.ll");
执行后果 0
代表 胜利运行, 1
代表 运行谬误.