2010-07-03 10 views
1

J'ai récemment commencé à expérimenter avec LLVM sous MinGW. J'ai lu le tutoriel Kaleidoscope mais maintenant j'ai des problèmes avec les fonctions externes.LLVM extern functions

Je déclarais des fonctions externes comme ceci:

const Type* doubleType = Type::getPrimitiveType(ctx, Type::DoubleTyID); 
std::vector<const Type*> doubleParams; 
doubleParams.push_back(doubleType); 
FunctionType* doubleDouble = FunctionType::get(doubleType, doubleParams, false); 
Function* SinFunction = Function::Create(doubleDouble, Function::ExternalLinkage, "sin", mod); 

Où mod est le module * et CTX est le LLVMContext &.

Dans ce cas, tout fonctionne correctement. Cependant, si je déclare une fonction:

extern "C" 
double my_cubic_transform(double x) { 
    return x*x*x; 
} 

Et changer la déclaration de SinFunction d'utiliser « péché » à l'aide de « my_cubic_transform » (sans changer quoi que ce soit d'autre), puis-je obtenir:

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

Changer mon makefile pour inclure l'option "-g" sans effet. Le tutoriel Kaléidoscope a suggéré que c'était possible dans LLVM (au moins pour JIT, que j'utilise). Alors je fais quelque chose de mal? Si oui, quoi?

Répondre

4

Peu importe, je l'ai compris.

Il s'avère que même si j'utilise un exécutable (exe) et non une DLL, je dois déclarer my_cubic_transform avec __declspec (dllexport). Celui qui a écrit le tutoriel doit avoir utilisé une autre plate-forme où __declspec n'existe pas et n'a donc pas trouvé ce problème.

+1

Ouais, probablement toute plate-forme autre que windows :) – jer

+0

c'est étrange, je suis sur Ubuntu et obtenir la même erreur – altschuler