使用 clang API 编译并运行 C 代码

sch*_*lli 5 api jit llvm clang

我想使用 clang/llvm API 来编译一个在字符串中定义的 c 函数并立即执行它。就像是:

void main() {
  std::string codestr = "int foo(int bar) { return bar * 2; }"

  clang::??? *code = clang::???.compile(codestr);

  int result = code->call("foo", 5);
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找教程,但到目前为止我发现的内容与我的目标不太相符或不起作用,因为它引用了 LLVM 的过时版本。目前,我使用的是 LLVM 3.5。

有人手头上有好的教程吗?

Mic*_*idl 1

我建议使用 MCJIT,因为旧的 JIT 基础设施将在进一步的版本中删除。我无法向您提供完整的教程,也不能保证自博客文章发表以来 API 没有发生变化,但在这里您将找到如何将 MCJIT 与来自 LLVM 的 Kaleidscope 示例一起使用的指南,仅此而已。很难找到 LLVM/Clang 的示例和教程。不过,我建议您尝试一下,也许您可​​以用一个简短的示例来记录您的旅程。

Julia项目还使用 MCJIT 对 Julia 语言内部的 C++ 代码进行即时编译也许你可以看一下代码并了解如何使用 MCJIT。

祝你好运 ;)