LLVM执行引擎找不到我的功能

时间:2016-11-08 13:26:51

标签: c++ llvm

我正在使用LLVM' ExecutionEngine来运行模块。该模块包含一个名为blub的函数,它返回5。在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;

它应该打印出所有功能的名称(只是&#34; blub&#34;)然后是结果,&#34; 5&#34;。

但是,我得到了这个错误:

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

因此该函数确实在模块中,但ExecutionEngine无法解析。我错过了一步吗?

1 个答案:

答案 0 :(得分:0)

来自the documentation of getPointerToNamedFunction(强调我的):

  

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

     

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

您应该在结果上调用findFunctionNamed然后runFunction