web-dev-qa-db-fra.com

la construction a échoué avec: ld: symbole en double _OBJC_CLASS _ $ _ Algebra5FirstViewController

Je reçois soudainement cette erreur lors de l'exécution de mon application via le simulateur iPhone:

clang: erreur: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation):

ldb imbbbbb Build/Intermediates/Algebra5.build/Debug-iphonesimulator/PSLE ​​Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o pour l'architecture i386

C'est à propos de quoi?

71
Joe Shamuraq

Il semble que la classe Algebra5FirstViewController soit compilée plusieurs fois.

Pouvez-vous vous assurer que les fichiers .m et .mm ne sont inclus qu'une fois dans les sources de votre projet dans Xcode? Vous pouvez également le confirmer en consultant le journal de compilation (dernière icône à droite, à côté de l'icône des points d'arrêt) et en vérifiant qu'il n'a été compilé qu'une seule fois.

De plus, si cette classe fait partie d'une bibliothèque à laquelle vous liez et que vous avez une classe du même nom, vous pourriez avoir la même erreur.

Enfin, vous pouvez essayer de nettoyer et de reconstruire, juste au cas où les anciens fichiers objets sont toujours présents et que des fichiers indésirables apparaissent dans les fichiers compilés. Au cas où...

MODIFIER

Je note également que la deuxième référence est faite dans le fichier pour ExercisesViewController. Peut-être qu'il y a quelque chose dans ce fichier. Vous avez soit importé le fichier Algebra5FirstViewController au lieu du fichier .h, ou bien ExercisesViewController a @implementation (Algebra5FirstViewController) au lieu de @implementation (ExercisesViewController), ou vous avez eu des problèmes avec ce fichier qui ont été nettoyés avec une reconstruction, ce qui a été nettoyé.

67
J_D

Cela peut arriver si le même fichier .m est référencé plusieurs fois dans la section "Compiler les sources" de votre cible dans "Phases de construction". Supprimez les entrées en double et ça devrait aller.

51
Andreas Ley

avait également ce problème en déclarant un const * NSString dans le fichier d'en-tête (incorrectement) au lieu du fichier d'implémentation (correctement)

30
toblerpwn

J'ai eu ce problème parce que j'ai accidentellement importé le .m au lieu du .h. J'espère que cette lecture fera gagner un peu de temps à quelqu'un avec le même problème.

24
user441669

J'ai eu le même problème. Je l'ai résolu!

Si vous avez importé des fichiers dans le projet, vérifiez que le fichier .m (principal) existe de la même manière que dans Cibles (Nom du projet) -> Phases de construction -> Compiler les sources.

Si le fichier n'existe pas, incluez-le à l'aide du bouton (+) Add affiché. De même, si des fichiers en double existent (le cas échéant), supprimez-les.

Maintenant, appuyez sur cmd + shift + k pour nettoyer le projet. Nouvelle construction ne devrait pas afficher cette erreur.

enter image description here

10
Jayprakash Dubey

J'ai eu une erreur similaire lors de l'ajout de fichiers d'un autre projet, comme l'a expliqué @paiego. Mon erreur est que je n'ai pas vérifié "Ajouter aux cibles". Comme expliqué ci-dessus, j'ai supprimé les références et rajouté les fichiers mais en vérifiant cette fois "Ajouter aux cibles".

5
Eric

J'obtenais une erreur similaire et je l'ai résolue de cette façon .

Essayez de définir l'option Construire l'architecture active uniquement sur NON pour le projet 'Pods' et la cible de votre application.

4
zeeawan

Dans un cas, j'ai constaté cette erreur en faisant glisser les fichiers .h et .m d'une nouvelle classe dans le projet. La seule solution que j'ai trouvée consistait à supprimer les références à ces fichiers, puis à les rajouter via le menu du projet.

3
paiego

Je l'ai rencontré lors de l'importation d'un ViewController.m dans TableViewController. Essayez de supprimer '#import "ViewController.m"' s'il s'est arrêté. J'espère que cette aide!

3
Huy Hóm Hỉnh

Cela se produit soit, certains fichiers sont manquants dans la section "Compiler les sources" ou des entrées en double sont trouvées pour certains fichiers. Dans mon cas, j'avais des entrées en double pour deux fichiers, j'ai supprimé une entrée pour chacun des fichiers, ce qui a résolu mon problème. J'espère que cela t'aides.

1
user2364956

[MISE À JOUR XCODE 7.1]

Première option qui a fonctionné:

J'ai changé le Deployment Target de 7.1 à 8.1 et l'erreur est partie.

J'espère que ça aide quelqu'un.

UPDATE (jour 2) : Deuxième fois, je suis de retour ici dans 2 jours.

Le deuxième jour, j'ai commencé à avoir plus d'erreurs en plus de cette erreur ennuyeuse. Le problème était un fichier en conflit que Xcode n'a pas reconnu. J'ai utilisé les liens ci-dessous comme aide:

  1. "_ OBJC_CLASS _ $ _ viewsampleViewController", référencé depuis:

  2. ‘ld: warning: répertoire introuvable pour l’option '

Et ultimement:

  1. "_ OBJC_CLASS _ $ _ viewsampleViewController", référencé depuis:

J'étais en train de tout supprimer du FrameWork Search Paths + Compile Resources + Run Script Phases + des pods, puis de les réinstaller pour retrouver le succès.

Le problème de ma taille (au jour 2) était plutôt un problème de fichiers en conflit ou de fichiers non reconnus par Xcode.

Mais en fin de compte, tout supprimer (mentionné ci-dessus et dans les liens), nettoyer plusieurs fois et réinstaller les phases pods/frameworks/scripts d'exécution y ont contribué.

Espérons vraiment que cela aide quelqu'un.

1
Lukesivi

Je poste une nouvelle réponse à cette question car j'ai rencontré cette erreur et je devais utiliser une solution différente que je pense spécifique à iOS 9.

Je devais explicitement désactiver l'option Activer le bitcode dans les paramètres de construction, qui est automatiquement activée dans la mise à jour.

Réponse référencée: Nouveaux avertissements dans iOS 9

1
mrshickadance

une fois que j'ai

18 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1

Pour moi, c'est à cause de cela que j'ai utilisé "const NSInteger" dans mon boîtier.

Ce que j'ai fait est de changer le NSInteger const en enum, et remplacer la référence avec des valeurs enum.

Cela a corrigé l'erreur pour moi.

1
sahan maldeniya

Il semble que pour m, j'ai fait glisser les fichiers dans le projet et qu'après cela ne fonctionnait plus, j'ai cliqué sur le fichier "ajouter des fichiers au projet". Les deux étaient la mauvaise approche. faites-le simplement glisser dans le dossier des projets (dans le Finder) qui contient les autres fichiers .h et .m.

1
Jasper Braun

'La commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)' - J'ai eu cette erreur lors de l'exécution d'une application phonegap sur iPhone. J'ai changé Build Active Architecture Only à Yes et cela a bien fonctionné.

1
user2218998

J'ai trouvé ceci article qui a fourni une solution pour moi. Cela concerne Xcode 7 où la valeur par défaut pour No Common Blocks est Oui plutôt que Non dans les versions précédentes.

Voici une citation de l'article:

Le problème semble être que la section "Pas de blocs communs" de la section "Apple LLVM 6.1 - Génération de code" du volet Paramètres de construction est définie sur Oui, dans la dernière version de Xcode.

Cela a provoqué ce que je décrirai comme des références circulaires dans lesquelles une classe incluse dans mes sources de compilation a été référencée via un #import dans un autre fichier source (appDelegate.m). Cela a entraîné des blocs en double pour les variables déclarées dans la classe de base d'origine.

Le fait de changer la valeur en Non a immédiatement permis à mon application de compiler et de résoudre mon problème.

1
Jazzmine

J'ai eu le même problème avec une bibliothèque, et j'ai essayé toutes les réponses énumérées ici et rien n'a aidé.

Je me suis retrouvé simplement en retirant la bibliothèque de Link Binary With Libraries, puis en l'ajoutant à nouvea et tout a bien fonctionné.

0
Dan Leveille

Des variations sur ce problème peuvent se produire si vous avez une bibliothèque ou un fichier manquant. Vérifiez qu'il ne manque aucun fichier dans votre explorateur de projet: ils seront écrits en rouge si Xcode ne peut pas les trouver.

0
SeanR

"Link Binary With Libraries" avait l'ancienne bibliothèque de pods de noms de projets. Fixé après le retrait.

  1. Élément de liste
  2. Projet
  3. Phases de construction
  4. Lien binaire avec des bibliothèques
  5. Supprimer la bibliothèque obsolète.
0
Adi

Simplement le nettoyage CMD + SHIFT + Kpuis construction CMD + B a travaillé pour moi.

0
drayfar

Le seul moyen (et infaillible) de résoudre ce problème est de générer le test à partir de la ligne de commande:

xcodebuild -workspace MyProject.xcworkspace/ -scheme MyScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' test

Donc, à ce stade, votre compilation échouera sûrement, mais vous verrez tous les problèmes de liaison. Dans mon cas, j'ai eu plusieurs problèmes tels que:

  • ld: framework 'Foo' non trouvé
    Pour résoudre ce problème, vous devez définir sur votre cible, BuildSettings-> Linking-> OtherLinkerFlags et supprimer le cadre 'Foo'.
  • tilisation de l'identifiant non résolu 'NomClasse'.
    Pour résoudre ce problème, je dois également ajouter/vérifier l’appartenance à la cible du fichier à la cible UITest.

Xcodebuild soulèvera d’autres problèmes possibles et vous pourrez le résoudre facilement.

0
Luca Davanzo

J'ai le même problème lorsque je travaille avec Bolts.framework. Il s'avère que lorsque Bolts est corrompu, aucune réimportation ne résoudra le problème. Je devais revenir au fichier de téléchargement d'origine et le réimporter complètement à partir de zéro. Cela a tout de suite résolu le problème. C'était un problème tellement étrange qu'il m'a fallu une éternité pour le résoudre ... espérons que ce conseil épargnera à certains d'entre vous les mêmes frustrations :)

0
Jul3ia

J'ai eu cette erreur lors de l'implémentation d'une sous-classe sans le framework nécessaire ajouté (MPMoviePlayerController sans le framework MediaPlayer, dans cet exemple)

0
DanWebster

Je l'ai reçu une fois en important (accidentellement) les fichiers .h et .m dans la même classe.

0
sma

Cela m'est arrivé lorsque j'ai nommé une référence UILabel et un int dans la même chose, je n'ai pas obtenu d'erreur en la tapant uniquement lorsque j'ai essayé de l'exécuter. Je ne savais donc pas que c'était là le problème. avoir quelque chose comme une étiquette qui est le "score" et vous l'appelez score, et nommez un int qui est le score aussi score alors ce problème se produit.

0
Yakov Shalunov

L'exécution de Xcode 4.6.3 sur OSX 10.7.5 a pu corriger cette erreur en modifiant Architectures en architecture native de Build Machine à partir de $ (NATIVE_Arch_ACTUAL).

0
Justin Greenough