2010-07-08 4 views
0

Je cherche à utiliser une fonction c dans un fichier .c à partir de ma classe objective-c. J'ai importé l'en-tête du fichier c. mais je reçois toujours un problème et mon programme ne compilerait pas.c/objective-c question

Undefined symbols:

"gluUnProject (flotteur, flotteur, flotteur, flotteur const *, const float *, int const *, flotteur *, flotteur *, float *)", référencé à partir de: - [GLView checkCollission: objet:] dans GLView.o ld: symbole (s) non trouvé collect2: ld a renvoyé 1 statut de sortie

Une idée de comment résoudre ce problème? Toute aide est certainement appréciée. Qutaibah

+2

Juste en vérifiant, vous utilisez gluUnProject que vous avez écrit vous-même dans votre projet iphone? L'iPhone n'est pas livré avec glu par défaut. Voir http://code.google.com/p/iphone-glu/ – 5ound

Répondre

3

Cette erreur est affichée par l'éditeur de liens et non par le compilateur. Cela est souvent dû au fait que le code est compilé en C et inclus à partir de C++ ou inversement.

Vous pouvez normalement résoudre ce problème en veillant à ce que les définitions de fonctions dans le fichier d'en-tête fait appliquer tout compilateur C++ pour utiliser la syntaxe C en ajoutant ce qui suit à l'en-tête:

#ifdef __cplusplus 
extern "C" { 
#endif 

... definitions goes here ... 

#ifdef __cplusplus 
} 
#endif 

Cette méthode garantit également que le .c Le fichier lui-même traite les définitions de fonction en tant que C et n'est pas accidentellement compilé en C++.

Si vous ne souhaitez pas modifier l'en-tête, vous pouvez encapsuler l'instruction #include de la même manière. Cela ne garantira cependant pas la compilation correcte du fichier .c lui-même.

EDIT: Juste une pensée: Je présume que vous êtes en train de compiler le fichier .c?

+0

Merci Claus, En xCode, je fais un clic droit sur 'glu.c' et clique sur compiler. dans l'en-tête du fichier glu.c: #ifndef _GLU_H_ #define _GLU_H_ #endif – user336994

+0

Avez-vous déjà ajouté le fichier glu.c à votre projet, il fait partie de la construction? –

+0

Oui, il apparaît dans le volet Groupes et fichiers. BTW, j'ai été en mesure de le faire fonctionner en suivant les points que vous avez fournis dans votre réponse ci-dessus. Merci beaucoup. – user336994