2016-11-08 6 views
1

Ich verwende LLVM ExecutionEngine, um ein Modul zu betreiben. Das Modul enthält eine Funktion mit dem Namen blub, die 5 zurückgibt. In C:LLVM-Ausführungsmodul kann meine Funktion nicht finden

int blub() { 
    int x = 5; 
    return x; 
} 

Hier ist meine C++ Code für die Ausführung "blub":

// Print out all of the functions, just to see 
for (auto& function : M->functions()) { 
    std::cout << function.getName().str() << std::endl; 
} 

auto engine = EngineBuilder(std::move(M)).create(); 

engine->finalizeObject(); 

using MyFunc = int(); 
auto func = (MyFunc*)engine->getPointerToNamedFunction("blub"); 

auto result = func(); 

std::cout << "result is " << result << std::endl; 

Es sollte die Namen aller Funktionen (nur "blub") und dann das Ergebnis, „drucken 5 ".

Allerdings habe ich diesen Fehler statt:

blub 
LLVM ERROR: Program used external function 'blub' which could not be resolved! 

So ist die Funktion in der Tat in dem Modul ist, aber es kann nicht durch die ExecutionEngine gelöst werden. Vermisse ich einen Schritt?

Antwort

0

Von the documentation of getPointerToNamedFunction (Hervorhebung von mir):

getPointerToNamedFunction - Diese Methode gibt die Adresse der angegebenen Funktion unter Verwendung der dlsym Funktionsaufruf.

Als solche ist es nur nützlich zum Auflösen von Bibliothekssymbolen, nicht Code generierte Symbole.

Sie sollten stattdessen findFunctionNamed anrufen und dann runFunction auf das Ergebnis.

Verwandte Themen