Piszę silnik skryptowy LLVM, który JIT kompiluje kod skryptu w niestandardowym języku. Mój problem polega na tym, że nie mogę wywoływać funkcji zewnętrznych (nawet funkcja erf() w C99 nie działa).Łączenie kodu JIT LLVM z zewnętrznymi funkcjami C++
Na przykład jeśli extern "C" funkcji erf,
extern "C" double erft(double x){
return erf(x);
}
i utworzyć funkcję z zewnętrznym wiązaniem
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);
pojawia się następujący komunikat o błędzie podczas uruchamiania mój skrypt z Erft (0.0)
LLVM ERROR: Program used external function 'erft' which could not be resolved!
Robi mapowanie ręcznie
void ExecutionEngine::addGlobalMapping(const GlobalValue * erfF, void * erft);
dostanie mi się następujący błąd:
declaration of `void llvm::ExecutionEngine::addGlobalMapping(const llvm::GlobalValue*, void*)' outside of class is not definition
Oczywiście robię coś bardzo złego. Każda pomoc będzie mile widziane
Ostrzeżenie dla przyszłych odwiedzających: odpowiedzi odnoszą się do przestarzałych metod. – antipattern
Odpowiedź na [to] (https://stackoverflow.com/questions/48105342/llvm-jit-add-library-to-module) Pytanie pokazuje, jak to zrobić z nie-przestarzałymi metodami. –