57 votes

Duplicate Symbol Error in Objective-C build ?

J'ai obtenu cette erreur lorsque j'ai appuyé sur build+debug :

ld: duplicate symbol .objc_class_name_BlogTableItemCell in /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o and /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

0 votes

Ne faites pas la partie @implementation à l'intérieur du fichier .h.

176voto

Vous pouvez également obtenir cette erreur si vous laissez par erreur l'auto-complétion de Xcode pour les déclarations #import spécifier le fichier '.m' pour la classe 'dupliquée' au lieu du '.h'.

64voto

Massimo Cafaro Points 18759

Il semble que vous compiliez la même classe BlogTableItemCell deux fois à différents endroits de votre code. Cela peut se produire dans les cas suivants.

  • Vous avez mis la même classe dans deux fichiers différents différents ;

  • Vous n'avez en fait qu'une seule implémentation de cette classe, mais vous liez également dans votre projet un framework ou une bibliothèque contenant une classe dont le nom est exactement le même que le vôtre.

Essayez de trouver dans l'ensemble du projet votre classe et assurez-vous qu'une seule copie est disponible dans votre projet.

0 votes

Vous avez placé la même implémentation de classe dans deux fichiers différents ; -> J'ai vérifié cela avec "Find in Project". Il n'y a qu'un seul fichier ! 2. "lier dans votre projet un framework ou une bibliothèque contenant une classe dont le nom est exactement le même que le vôtre". -> J'ai également vérifié cela avec "Find in Project". Il n'y a qu'un seul lien à la bonne position. Une suggestion pour la suite ?

2 votes

C'est bon, je l'ai. Xcode avait une ancienne référence au fichier dans l'explorateur de classe. Merci

0 votes

J'ai eu ce même problème lorsque j'ai intégré le SDK de Facebook (qui comprenait des fichiers SBJson) dans un projet que j'utilisais et qui possédait déjà ces mêmes classes SBJson. Le fait d'avoir deux copies provoquait l'erreur. Finalement, j'ai supprimé un jeu de ces fichiers et le problème a été résolu.

43voto

NeilNie Points 862

Pour moi, changer 'No Common Blocks' de Yes à No ( sous Targets->Build Settings->Apple LLVM - Code Generation ) enter image description here

25voto

jsaven Points 141

J'ai eu un problème similaire dû à une mauvaise définition des constantes. J'avais défini une constante dans mon en-tête :

int const kCropLocationTop = 1;

Il a vraisemblablement été importé plusieurs fois. Pour le corriger, j'ai modifié l'en-tête comme suit :

extern int const kCropLocationTop;

et déplacé l'assignation des constantes dans le fichier .m :

int const kCropLocationTop = 1;

J'espère que cela aidera tous ceux qui sont aussi ignorants que moi des concepts simples de l'objectif C !

18voto

bradgonesurfing Points 8600

iPhone : Duplicate Symbol Error ? par user576924

a répondu correctement pour moi. Cependant, pour trouver le gremlin en question, ce snippet ZSH.

grep "import.*\.m" **/*.[hm]

Il vous dira immédiatement où se trouve votre erreur.

0 votes

Merci pour cela. Je pense que l'on peut le résumer ainsi : N'essayez pas de #import Les fichiers .m !

1 votes

On pourrait effectuer une recherche similaire dans Xcode. Recherchez dans tout le projet (Command-Shift-F) les éléments suivants .m" y .m> . Les deux devraient suffire pour trouver la ligne incriminée.

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