44 votes

dupliquer le symbole _OBJC_METACLASS_$_ClassName

J'essaie d'exécuter mon application cocos2d et je rencontre cette erreur, alors que j'ai récemment mis à jour mon sdk en 4.2 et mon cocos2d en 0.99.5.

J'ai essayé de nettoyer mon projet et même de changer le Target ios Deployment mais l'erreur reste la même. J'ai également renommé le nom de la classe afin d'éviter les doublons avec les noms des classes de la bibliothèque de cocos2d.

ld : symbole dupliqué _OBJC_METACLASS_$_MenuSceneNew dans /Users/umaidsaleem/Desktop/functionalityTest/build/Debug-iphonesimulator/libcocos2d libraries.a(MenuScene.o) et /Users/umaidsaleem/Desktop/functionalityTest/build/functionalityTest.build/Debug-iphonesimulator/functionalityTest.build/Objects-normal/i386/MenuScene.o

165voto

derekv Points 1371

Une autre chose assez simple à vérifier est que vous n'avez pas accidentellement #import a .m au lieu d'un fichier .h fichier d'en-tête.

Cela m'est arrivé.

3 votes

C'est exactement ce que j'ai fait à l'instant. Merci pour votre commentaire. Je savais que j'étais en train de suivre une erreur stupide, mais je n'étais pas sûr de laquelle et c'est ce qui s'est passé !

0 votes

Les gens doivent se rendre compte que cette erreur se produit bien plus souvent qu'en établissant des liens deux fois. Merci de votre attention !

0 votes

XCode doit nous en avertir. Je fais cette même erreur de temps en temps

55voto

JeremyP Points 46808

Vous liez deux fois le fichier MenuScene.m. Vous l'avez apparemment dans une bibliothèque statique et également dans votre application principale.

1 votes

J'ai même changé le nom précédemment en MenuSceneNew et tout le nom de la classe a été changé en MenuSceneNew.h, MenuSceneNew.m mais l'erreur reste la même.

0 votes

@user366584 : Peu importe que vous renommiez la classe ou le fichier, le fait est qu'il est lié deux fois.

0 votes

J'ai ce problème. Que faites-vous si votre bibliothèque statique dépend de ce fichier, qui se trouve également dans une autre bibliothèque statique à laquelle votre application principale est liée ?

37voto

Egil Rausner Points 321

Une autre raison, pour ceux qui ont fait la même chose que moi, pourrait être que vous avez recréé une classe d'objets gérés. En faisant cela et en choisissant un autre groupe dans la structure du projet, vous avez accidentellement créé une autre référence aux mêmes fichiers.

J'ai fini par avoir deux références pour l'en-tête et la mise en œuvre à la fois dans la racine du projet et dans mon groupe modèle. La suppression des références les plus élevées aux fichiers .h et .m a permis d'éliminer l'échec de la liaison.

0 votes

Merci de votre attention ! Je ne l'avais même pas remarqué. Quelle horrible perte de temps. Merci encore pour le conseil.

0 votes

Merci ! C'était mon problème. En fait, j'avais l'en-tête et l'impl 2x dans le même dossier Models ! Cela m'était déjà arrivé, mais cette lecture m'a poussé à y regarder de plus près. facepalm

0 votes

Je suis tombé sur ce problème et le problème est que j'ai créé mes entités dans un groupe appelé 'x' puis recréé dans le groupe 'y'... pour une raison quelconque le stupide fichier pbxprojec garde la référence à tout et ma construction échouait.

16voto

Jibeex Points 327

Vérifiez les sources de compilation de votre cible et voyez si un fichier class.m est inclus deux fois.

0 votes

Simple et efficace !

2voto

EmphaticArmPump Points 479

J'ai également constaté que cette erreur particulière se produisait lorsqu'un fichier qui n'avait pas été ajouté au projet était référencé quelque part dans le projet. Les deux cas où j'ai rencontré ce problème sont ceux où j'ai supprimé des fichiers du projet sans supprimer les références à ces fichiers, et ceux où, dans le cadre d'un travail coopératif sur un projet, un coéquipier a ajouté la référence mais je n'ai pas ajouté le fichier à ma version du projet.

Je sais que l'OP a résolu son problème, mais j'ai pensé que cela pourrait aider quelqu'un d'autre qui lirait cette question en cherchant de l'aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X