web-dev-qa-db-fra.com

Erreur de l'éditeur de liens Mach-O sur Xcode 4.6

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!

16
user1253582

Allez simplement dans "Construire les phases" -> "Compiler les sources" et cherchez les doublons de classes.

23
edzio27

Vérifiez si vous avez "* .m"fichiers dans votre #import! Il semble que ce soit mon erreur ...

17
Arnaud Nelissen
  1. Quitter Xcode
  2. Redémarrer le système
  3. Sélectionnez Xcode -> Préférences -> Emplacements
  4. Dans Emplacements, vous verrez «Données dérivées». Cliquez sur l'icône de flèche juste à côté du chemin.
  5. Cela ouvrira un dossier contenant 'Données dérivées', supprimez-le.
  6. Nettoyer le produit et courir

    si ne fonctionne toujours pas alors

    Paramètres de construction> Activer le code binaire> Non enter image description here

5
Azhar

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.

5
Yerkezhan

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.

2
Rishab

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. 

0
Khaled Barazi

Lorsque vous refactorisez une classe de fonction, vous aurez parfois cette erreur Il suffit d'aller à Produit-> Nettoyer et reconstruire.

0
Alex

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 

0
ElonChan

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!

0
ColossalChris