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?
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?
Réponses:
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?
À 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é.
Pour moi, c'est que j'ai importé un fichier en tant que .m pas en tant que .h par erreur
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:
pod deintegrate
pod install
Une autre solution consiste à:
Sélectionnez Projet -> Cible -> Phase de construction -> Compiler la source -> recherchez le fichier mentionné dans la 3e dernière ligne d'erreur (dans votre cas BFAppLinkReturnToRefererView.o ).
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.
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 .
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é. :)
Si vous passez à Xcode 7 ou 8 et que vous ouvrez un projet vraiment ancien, j'ai rencontré ce problème:
dans SomeConstFile.h
NSString * const kAConstant;
dans SomeConstFile.m
NSString *const kAConstant = @"a constant";
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
extern NSString * const kAConstant;
Ci-dessous Patch fonctionne pour moi .. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Le remettre sur NON a résolu le problème!
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
Pour moi, le problème était le style de création de const, qui fonctionnait bien jusqu'à ce iOS8 .. j'avais quelques lignes comme:
int const kView_LayoutCount = 3;
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!
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:
NSString const *kGreenColor = @"#00C34E";
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.
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".
À 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.
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.
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.
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.
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 ++
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