Я пишу механизм сценариев LLVM, который JIT компилирует код сценариев на пользовательском языке. Моя проблема в том, что я не могу вызвать внешние функции (даже функция C99 erf () не работает).
Например, если я наберу "С" функцию 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);
получить следующее сообщение об ошибке при запуске моего скрипта с erft (0.0):
ОШИБКА LLVM: Программа использовала внешнюю функцию 'erft', которая не может быть разрешена!
Выполнение сопоставления вручную,
void ExecutionEngine::addGlobalMapping( const GlobalValue * erfF, void * erft);
выдаст мне следующую ошибку:
объявление `void llvm :: ExecutionEngine :: addGlobalMapping (const llvm :: GlobalValue *, void *) 'вне класса не является определением
Очевидно, я делаю что-то очень неправильное. Любая помощь будет высоко ценится