J'ai une application iOS sur Xcode 4.6 et lorsque j'ai récemment essayé de créer et d'exécuter le simulateur iPhone 6.1, une erreur «Mach-O Linker» s'est produite. Il a continué à dire:
ld: 17 symboles en double pour l'architecture i386 clang: error: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)
Quelqu'un sait-il comment résoudre ceci?
Merci beaucoup!
Allez simplement dans "Construire les phases" -> "Compiler les sources" et cherchez les doublons de classes.
Vérifiez si vous avez "* .m"fichiers dans votre #import
! Il semble que ce soit mon erreur ...
Nettoyer le produit et courir
si ne fonctionne toujours pas alors
Dans mon exemple, j'ai déclaré
extern NSString const *keyString
dans deux fichiers différents. J'ai renommé l'un d'entre eux et cela a résolu mon problème.
Dans mon cas c'était des constantes.
NSString *const cellID = @"cellID";
Cette ligne a été écrite dans deux fichiers .m. Après avoir ajouté le mot clé static
au début, le problème a été résolu.
Ce problème peut également être recréé dans un nouveau projet. On pourrait penser que la définition de constantes dans les différents fichiers .m n'aura aucun effet, car elles sont privées. Mais je ne sais pas comment le compilateur gère les éléments en coulisses. De plus, lorsque vous appuyez sur le problème dans le navigateur de problèmes, il ne s'ouvre pas dans l'éditeur comme il le fait pour tout autre problème. Vraiment frustrant.
Je ne suis pas sûr de pouvoir vous donner une solution, mais je partagerai une réponse car la même chose m'est arrivée sur xCode 4.6 également. J'ai ajouté un en-tête de classe C et un fichier d'implémentation et les ai inclus dans main. J'ai ensuite décidé de supprimer ce nouvel en-tête et son implémentation. Quand j'ai fini par ajouter une nouvelle classe/en-tête c avec le même nom et les mêmes appels de fonction, j'ai fini par avoir votre erreur.
Franchement, cela pourrait être un bug. Le moyen le plus rapide et le plus simple que j’ai corrigé était de commencer un nouveau projet et d’attirer toutes les classes.
Lorsque vous refactorisez une classe de fonction, vous aurez parfois cette erreur Il suffit d'aller à Produit-> Nettoyer et reconstruire.
Si vous souhaitez modifier une valeur dans une classe différente. N'oubliez pas de marquer avec des mots clés statiques.
ou le clang jettera une telle erreur ci-dessous sans aucune interprétation de valeur
Apple Mach-O Linker Error clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1
Assurez-vous de ne pas utiliser de méthodes non-instantanées portant le même nom dans plusieurs classes (par exemple, si j'ai deux contrôleurs de vue assez similaires, je passe donc rapidement au copier-coller du code d'un contrôleur de vue à l'autre et avoir des méthodes appelées la même chose comme: NSMutableString * filterStringFromStringWithFilter (NSString * string, NSString * filter)), l'application ne sait pas quelle méthode utiliser puisqu'elles sont toutes les deux disponibles, RENAME IT sur la deuxième classe et modifie tous les appels correspondants méthode sur cette classe et vous avez supprimé la confusion. Ne voulons-nous pas tous que les choses soient plus claires!