Verknüpfung von LLVM JIT-code externe C++ - Funktionen

Ich Schreibe ein LLVM-scripting-engine JIT-kompiliert-scripting-code in einer benutzerdefinierten Sprache. Mein problem ist, dass ich nicht in der Lage bin für den Aufruf von externen Funktionen (auch der C99-erf () - Funktion ist fehlerhaft).

Zum Beispiel, wenn ich extern "C" die erf-Funktion,

extern "C" double erft(double x){
return erf(x);
}

und erstellen Sie eine Funktion mit externer Verknüpfung

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);

bekomme folgende Fehlermeldung beim ausführen meines scripts mit erft(0.0) :

LLVM FEHLER: Programm externe Funktion "erft", die nicht aufgelöst werden konnte!

Tun das mapping manuell,

void ExecutionEngine::addGlobalMapping( const GlobalValue *  erfF, void *  erft); 

wird, bekomme ich die folgende Fehlermeldung:

Deklaration von `void llvm::ExecutionEngine::addGlobalMapping(const llvm::GlobalValue*, void*)' außerhalb der Klasse ist nicht definition

Offensichtlich mache ich etwas sehr falsch. Jede Hilfe wäre sehr geschätzt werden

  • Eine Warnung für zukünftige Besucher: Die Antworten sind referering zu veralteten Methoden..
  • Die Antwort auf dieser Frage zeigt, wie dies mit den nicht-veralteten Methoden.
Schreibe einen Kommentar