我正在使用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
无法解析。我错过了一步吗?
答案 0 :(得分:0)
来自the documentation of getPointerToNamedFunction
(强调我的):
getPointerToNamedFunction - 此方法使用 dlsym 函数调用返回指定函数的地址。
因此,它仅用于解析库符号,而不是代码生成的符号。
您应该在结果上调用findFunctionNamed
然后runFunction
。