c++ - LLVM execution engine cannot find my function -
i using llvm's executionengine
run module. module contains function called blub
returns 5
. in c:
int blub() { int x = 5; return x; }
here c++ code executing "blub":
// print out of functions, see (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 " << result << std::endl;
it should print out names of functions (just "blub") , result, "5".
however, error instead:
blub llvm error: program used external function 'blub' not resolved!
so function indeed in module, cannot resolved executionengine
. missing step?
from the documentation of getpointertonamedfunction
(emphasis mine):
getpointertonamedfunction - method returns address of specified function using dlsym function call.
as such useful resolving library symbols, not code generated symbols.
you should instead call findfunctionnamed
, runfunction
on result.
Comments
Post a Comment