61 votes

Dupliquer le symbole questions

Au cours d'une refactoriser de un iOS de projet, je suis tombé sur cet ours d'un bug. Lors de la liaison de la phase, j'obtiens ce message:

ld: dupliquer le symbole _OBJC_IVAR_$_TinCanViewController.currentViewController dans /chemin/vers/TinCanViewController-E98A666B7AF2673A.o et /chemin/vers/TinCanViewController-E98A666B7AF2673A.o

Aussi loin que je peux dire, on dirait qu'il prétend TinCanViewController-E98A666B7AF2673A.o déclare le symbole spécifié deux fois; les deux chemins sont pointant vers l'exact même .o fichier. J'ai couru nm sur le fichier, et il ne comprenait que symbole d'une fois:

00008150 S _OBJC_IVAR_$_TinCanViewController.currentViewController

J'ai couru nm sur tous les autres .o fichiers dans le répertoire pour voir si elles étaient en quelque sorte déclarant que cette symbole, aussi, mais ils ne sont pas. Cela arrive à n'importe quel membre je ajouter à la TinCanViewController classe - ce n'est pas spécifique à currentViewController.

Je sens que je dois être en quelque sorte de se lier à la classe deux fois, en quelque sorte, mais j'ai assez assidûment vécu et vérifié toutes les références à cette catégorie. Dans la version remaniée, il y a fondamentalement aucun. L'AppDelegate il comprend, mais pour l'instant il est fondamentalement juste un passthrough classe qui charge un autre ViewController au début. Pas d'autres classes dans le projet comprend-il.

Toutes les suggestions sur ce qui pourrait être à l'origine de ce ou comment je pourrais debug-il mieux?

238voto

sleepy Points 3984

J'ai eu ce problème sur le dernier Xcode 4. Cause: j'ai inclus file.m au lieu de file.h

Éventuellement, vous inclus, TinCanViewController.m (ce qui devrait être TinCanViewController.h)

31voto

maxpower Points 539

J'ai eu ça, mais mon problème était lié à la fusion des problèmes de notre repo. L' .m fichier a été cité deux fois dans un endroit qu'il ne doit avoir été répertorié une seule fois (dans le projet, mais pas dans le fichier/structure du groupe, de sorte que vous ne pouvait pas voir le problème dans Xcode, seul le message d'erreur). La solution est l'ouverture de l' .pbxproj fichier à l'intérieur de votre fichier de projet et la localisation de l'entrée en double dans le fichier. Après la suppression de la dupliquer le projet de construction très bien.

5voto

Ram Points 31

Il m'est arrivé d'avoir inclus la .h fichier et le .m fichier deux fois dans le projet. Une fois que j'ai enlevé la deuxième copie, l'erreur a disparu.

3voto

Rafael Reis Points 31

Ce problème à résoudre ici, lorsque j'ai supprimé (à l'aide de Xcode) tous les fichiers .m et .h à partir de la Classe de dossier, puis j'ai nettoyé Projet (Commande + Maj + K) et Bâtie de nouveau. J'ai donc faites glisser les fichiers depuis le Finder de Dossier de la Classe dans Xcode de nouveau. Enfin, j'ai nettoyé et construire mon Projet de nouveau...

Bonne Chance !!!

1voto

psychotik Points 11937

Je pense que c'est un bug avec les plus récents de l'éditeur de liens lors de la création universelle des bibliothèques statiques. Je peux;t trouver le numéro de bogue actuellement, mais cela arrive parce qu'il génère incorrecte armv6 et armv7 sans disambiguating.

Pour vérifier si c'est le cas, changez la configuration de construire seulement armv6 ou amv7, et vous n'aurez pas ce problème.

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