Я пишу LLVM скриптовый движок, который JIT компилирует код сценария на пользовательском языке. Моя проблема в том, что я не могу вызывать внешние функции (даже функция C99 erf() не работает).
Например, если я extern "C" выполняет функцию erf,
extern "C" double erft(double x){
return erf(x);
}
и создать функцию с внешней связью
std::vector<const Type*> Double1(1,Type::getDoubleTy(getGlobalContext()));
FunctionType *FT = FunctionType::get(Type::getDoubleTy(getGlobalContext()),Double1,false);
Function *erft = Function::Create(FT,Function::ExternalLinkage,"erft",TheModule);
получить следующее сообщение об ошибке при запуске my script с помощью erft (0.0):
LLVM ERROR: программа использует внешнюю функцию 'erft', которая не может быть решена!
Выполнение сопоставления вручную,
void ExecutionEngine::addGlobalMapping( const GlobalValue * erfF, void * erft);
получит следующую ошибку:
Объявление `void llvm:: ExecutionEngine:: addGlobalMapping (const llvm:: GlobalValue *, void *) 'вне класса не является определением
Очевидно, я делаю что-то очень плохое. Любая помощь будет высоко оценена