【发布时间】:2012-07-24 08:16:46
【问题描述】:
我想编写一个 C++ 函数,它接受一个已链接的llvm::Module,并将其输出到一个可执行文件。它应该使用 llvm/clang API,而不是分叉一个进程并调用命令行 clang。
查看 llvm/clang 源代码后,我发现最接近的是将 Module 输出到 .o 文件。例如,llc 工具 (tools/llc/llc.cpp) 通过调用 TargetMachine::addPassesToEmitFile(...) 来完成此操作。
另一种方法是将Module 写入.bc 文件,然后创建CompilerInstance 并调用ExecuteCompilerInvocation(如在tools/clang/tools/driver/cc1_main.cpp 中)。但是还有文件 I/O 的开销。
那么,我是在寻求一些可能的东西,还是必须求助于替代方案?
编辑:(当然这是可能的。它发生在clang源代码中的某处,我就是找不到。)
【问题讨论】:
-
来自
llc的一些复制粘贴可能会完成这项工作。 -
我不这么认为。
llc可以生成.o 文件但不能生成可执行文件。