JL-скомпилированная программа LLVM не может найти внешние функции
Моя программа, которая JIT компилирует модуль IR LLVM и вызывает функциюfoo
определенный в нем сбой во время выполнения, еслиfoo
использует внешне определенную функцию:
LLVM ERROR: Program used external function 'glutInit' which could not be resolved!
Моя программа:
// foo1.cpp
#include
extern "C" void foo()
{
glutInit(0,0);
}
// foo2.cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
using namespace llvm;
InitializeNativeTarget();
LLVMContext context;
SMDiagnostic error;
std::ifstream ir_file("foo1.s");
std::string ir((std::istreambuf_iterator(ir_file)),
(std::istreambuf_iterator()));
Module *m = ParseIR(MemoryBuffer::getMemBuffer(StringRef(ir)), error, context);
if(!m)
{
error.print(argv[0], errs());
}
ExecutionEngine *ee = ExecutionEngine::create(m);
Function *func = ee->FindFunctionNamed("foo");
if(func == 0)
{
std::cerr < "Couldn't find Function foo" < std::endl;
std::exit(-1);
}
typedef void (*fcn_ptr)();
fcn_ptr foo = reinterpret_cast