J'écris un moteur de script LLVM qui compile le code de script dans un langage personnalisé. Mon problème est que je suis incapable d'appeler des fonctions externes (même la fonction C99 erf() échoue).Liaison du code JL de LLVM aux fonctions C++ externes
Par exemple, si j'extern "C" la fonction erf,
extern "C" double erft(double x){
return erf(x);
}
et créer une fonction avec lien externe
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);
le message d'erreur suivant lors de l'exécution de mon script avec Erft (0.0):
LLVM ERROR: Program used external function 'erft' which could not be resolved!
Faire le mappage manuellement,
void ExecutionEngine::addGlobalMapping(const GlobalValue * erfF, void * erft);
va me faire l'erreur suivante:
declaration of `void llvm::ExecutionEngine::addGlobalMapping(const llvm::GlobalValue*, void*)' outside of class is not definition
Il est évident que je fais quelque chose de très mal. Toute aide serait appréciée
Un avertissement pour les futurs visiteurs: Les réponses se réfèrent à des méthodes obsolètes .. – antipattern
La réponse à [this] (https://stackoverflow.com/questions/48105342/llvm-jit-add-library-to-module) question montre comment faire cela avec des méthodes non-obsolètes. –