Lorsque j'essaie d'exécuter mon projet Xcode, cela échoue avec une erreur indiquant que j'ai des symboles en double. J'ai cherché en ligne où trouver ces doublons mais je n'ai pas eu de chance:
Une idée de comment réparer ça?
ios
objective-c
xcode
linker-errors
Picciano
la source
la source
Réponses:
D'après les erreurs, il semblerait que le FacebookSDK.framework inclut déjà les classes Bolts.framework. Essayez de supprimer le Bolts.framework supplémentaire du projet.
la source
Pour moi, cela a aidé à basculer le paramètre du compilateur "No Common Blocks" sur NO: Cela semble assez logique, le paramètre est expliqué ici: À quoi sert GCC_NO_COMMON_BLOCKS?
la source
À l'aide de Xcode 8, l'option «Mettre à jour le projet avec les paramètres recommandés» est activée «Aucun bloc commun» pour mon projet.
Le remettre sur OFF a tout réparé.
la source
Pour moi, c'est que j'ai importé un fichier en tant que .m pas en tant que .h par erreur
la source
J'ai gâché mes pods lors de la rétrogradation d'un pod et j'ai réussi à résoudre le problème avec les symboles en double pour l'architecture arm64 en supprimant les pods et en les réinstallant avec:
la source
Une autre solution consiste à:
Ensuite, vous verrez 1 ou 2 fichiers dans le résultat de la recherche.
Supprimez l' un d'entre eux et compilez à nouveau . Il devrait se recompiler maintenant car il ne reste qu'un seul fichier et plus de conflits pour la construction.
Si cela ne fonctionne pas, le fichier contient probablement des erreurs et vous devez les supprimer toutes, puis les recompiler. Cela devrait fonctionner à nouveau.
la source
Lors de la mise à niveau vers Xcode 8, j'ai reçu un message me demandant de passer aux paramètres recommandés. J'ai accepté et tout a été mis à jour. J'ai commencé à avoir un problème de compilation:
Symbole en double pour XXXX Symbole en double pour XXXX Symbole en double pour XXXX
Un total de 143 erreurs. Je suis allé à Target-> Build settings -> No Common Blocks -> Set it to NO. Cela a résolu le problème. Le problème était que les projets intégrés avaient des blocs de code en commun et ne pouvaient donc pas le compiler. Des explications peuvent être trouvées ici .
la source
Cette erreur se produit lorsque Linker tente de lier les fichiers obj. Quelques raisons auxquelles je pourrais penser pour cette erreur sont:
La fonction / classe dupliquée est définie à deux endroits / fichiers différents dans le projet et un seul d'entre eux était censé compiler pour toute variante de commande de construction. Mais d'une manière ou d'une autre, ces deux fichiers ont été compilés dans votre projet. Vous devez donc vérifier vos conditions if-else ou d'autres dépendances qui ajoutent des fichiers src à la liste des fichiers devant être compilés et supprimer le fichier inutile pour votre commande de construction particulière.
La fonction / classe dupliquée est définie accidentellement à deux endroits / fichiers différents dans le projet. Supprimez la mauvaise définition.
Nettoyez votre répertoire OBJ avant de reconstruire, il peut y avoir des anciens fichiers obj de vos versions précédentes qui pourraient être à l'origine de ce conflit.
PS je ne suis pas un expert, mais c'est ainsi que j'ai résolu ce problème quand je l'ai affronté. :)
la source
Si vous passez à Xcode 7 ou 8 et que vous ouvrez un projet vraiment ancien, j'ai rencontré ce problème:
dans
SomeConstFile.h
dans
SomeConstFile.m
Les versions précédentes du compilateur supposaient que la définition dans le fichier d'en-tête était extern et donc inclure SomeConstFile.h partout était bien.
Vous devez maintenant déclarer explicitement ces consts comme extern:
dans
SomeConstFile.h
la source
Ci-dessous Patch fonctionne pour moi .. :)
Le remettre sur NON a résolu le problème!
la source
Eh bien, parfois, lorsque vous utilisez un SDK comme FB ou des bibliothèques comme Vuforia ou GoogleAnalytics, l'ajout d'exemples de projets peut causer le problème qu'ils incluent déjà Frameworks et ainsi de suite, vous devez donc vous assurer de ne pas répéter les symboles que vous ajoutez manuellement alors qu'ils sont déjà inclus dans les échantillons
la source
Pour moi, le problème était le style de création de const, qui fonctionnait bien jusqu'à ce iOS8 .. j'avais quelques lignes comme:
dans mon fichier .h. Six lignes comme ont abouti à 636 fichiers de l'éditeur de liens une fois que les blocs communs ont été définis sur NON. (14k + si OUI). Déplacement des lignes vers .m après avoir supprimé .h de la déclaration de valeur et la compilation était prête.
J'espère que cela aide les autres!
la source
Dans mon cas, la raison était trop stupide:
J'avais un fichier Constant.h dans lequel j'avais défini des macros. J'ai pensé à faire NSString là-bas. et a fait ceci:
cela a causé le problème des symboles dupliqués pour l'architecture arm64 et la commande Linker a échoué avec le code de sortie 1. La suppression de la ligne const NSString a fonctionné pour moi.
la source
vérifiez votre fichier d'inclusion, j'ai eu ce problème parce que j'ai accidentellement # importé "filename.m" au lieu de "filename.h", la correction automatique (tabulation) a mis un "m" et non "h".
la source
À partir des erreurs, il semblerait que toutes les classes apparaissent plusieurs fois. Trouvez et supprimez les classes qui fonctionneront
Je crée un fichier AppDelegate.h et .m en créant plusieurs fois. Donc, cette erreur se produira.Enfin, trouvez et supprimez les classes que cela fonctionne bien pour moi.
la source
pour résoudre ce problème, allez dans les phases de construction et recherchez les fichiers en double comme (facebookSDK, unityads) et supprimez (extension file.o) puis reconstruisez.
la source
Pour moi, j'ai créé une méthode appelée
sampleMethod
dans ViewController_A et créé la même méthode dans ViewController_B aussi, cela m'a causé cette erreur, puis j'ai changé le nom de la méthode dans ViewController_B ensecondSampleMethod
. Il a corrigé l'erreur.Cela semble être une bonne fonctionnalité pour réduire le code et ne pas dupliquer le même code à de nombreux endroits.
J'ai essayé de changer les blocs Non commun de Oui à Non, puis d'activer la testabilité de Oui à Non. Cela n'a pas fonctionné. J'ai vérifié les fichiers en double également dans les phases de construction, mais il n'y a pas de fichiers en double.
la source
J'ai eu ce problème parce que je définissais paresseusement une variable dans mon .m en dehors d'une méthode, puis dans un autre fichier .m, je définissais une autre variable avec le même nom en dehors d'une méthode. Cela provoquait un problème de duplication de nom de variable globale.
la source
Le problème pour moi était que j'avais inclus manuellement un cadre, mais que j'avais également inclus ce même cadre dans CocoaPods sans savoir que je l'avais fait. Une fois que j'ai supprimé l'un ou l'autre, le problème a disparu
la source
Voir Erreur de symbole en double lors de l'ajout de la sous-classe NSManagedObject, lien en double
la source
J'ai pu résoudre cette erreur qui disait "158 symboles en double pour l'architecture armv7, 158 symboles en double pour l'architecture arm64" --- Si c'est ce que vous obtenez aussi, cela signifie que vous essayez de compiler un fichier qui importe ou héritant d'un framework ou d'une bibliothèque statique ayant des références à du code ou à des fichiers C ++. Un moyen simple de gérer cela serait de changer l'extension de votre fichier .m en .mm. C'est ainsi que cela est géré si vous utilisez Objective C, mais pas sûr sur Swift.
Également dans vos paramètres de construction - vous pouvez mettre à jour les "autres indicateurs de l'éditeur de liens" vers -lc ++
la source
Si quelqu'un expérimente ce travail sur Flutter, n'essayez pas de désintégrer pod, pod init.
La façon dont j'ai résolu est de lancer Flutter clean, Flutter run -d [iOS Device]
L'espoir peut aider quelqu'un.
la source
Plz Changer le réglage.
Étape 1: Allez dans TARGETS -> Build Settings -> No Common Blocks -> No
Étape 2: Allez dans TARGETS -> Build Settings -> enable testability -> No
la source