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?