LLVM执行引擎找不到我的函数

LLVM execution engine cannot find my function

本文关键字:我的 函数 找不到 引擎 执行 LLVM      更新时间:2023-10-16

我使用LLVM的ExecutionEngine来运行模块。该模块包含一个名为blub的函数,它返回5。In C:

int blub() {
  int x = 5;
  return x;
}

下面是我执行"blub"的c++代码:

// Print out all of the functions, just to see
for (auto& function : M->functions()) {
  std::cout << function.getName().str() << std::endl;
}
auto engine = EngineBuilder(std::move(M)).create();
engine->finalizeObject();
using MyFunc = int();
auto func = (MyFunc*)engine->getPointerToNamedFunction("blub");
auto result = func();
std::cout << "result is " << result << std::endl;

它应该打印出所有函数的名称(只是"blub"),然后是结果"5"。

但是,我得到这个错误:

blub
LLVM ERROR: Program used external function 'blub' which could not be resolved!

所以功能确实在模块中,但它不能由ExecutionEngine解决。我是不是漏了一步?

来自getPointerToNamedFunction(重点是我的)的文档:

getPointerToNamedFunction -该方法通过使用dlsym函数调用返回指定函数的地址。

因此,它只用于解析库符号,而不是代码生成的符号。

你应该调用findFunctionNamed,然后runFunction的结果