Dupliquer les symboles pour l'architecture arm64


103

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:

entrez la description de l'image ici

Une idée de comment réparer ça?


1
cela signifie que vous avez trop de BFAppLinkReturnToRefererView
Andrey Chernukha

En outre, vous voudrez peut-être nettoyer un peu votre projet plutôt que de créer des liens vers des cadres installés sur votre bureau. :)
picciano

Dans mon cas, j'ai ajouté extern NSString * const tColor; dans le fichier .h et NSString const * tColor = @ "# 000022"; dans deux classes .m différentes.
ios_dev

Vous pouvez trouver ce que vous cherchez ici stackoverflow.com/a/46678210/988941
MoOx

Réponses:


66

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.


22
comment? pouvez-vous s'il vous plaît me guider pas à pas
Imdad Ali

68

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?


Tu es l'homme! Je viens de créer un nouveau projet xCode 7.3.1 et le paramètre par défaut est OUI :(
Yaro

4
Cette option a été activée pour moi par la fenêtre "Mettre à jour le projet avec les paramètres recommandés" de Xcode.
commscheck le

Vous êtes le meilleur
showmyroutes

conseil inestimable, mais doh n'a pas aidé dans mon cas! : O
Fattie

49

À 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é.


2
Mettre à jour le projet avec les paramètres recommandés, comment faire? je veux dire de quel menu?
Sazzad Hissain Khan

@SazzadHissainKhan C'est dans vos paramètres de construction.
Voyage du

21

Pour moi, c'est que j'ai importé un fichier en tant que .m pas en tant que .h par erreur


C'est LOL, mais vrai; D
Vladimir

cela m'est juste arrivé .. Je blâme l'achèvement du code pour tout
user426132

21

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

J'utilisais le SDK Google Places, intégré via CocoPods - 3.9.0, et cette réponse a résolu mon problème.
andrewlundy

12

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.


2
Réponse extrêmement sous-estimée, merci pour votre aide, Lukas! :)
patreu22

Pas de problème heureux que votre problème ait été résolu :)

10

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 .


9

Cette erreur se produit lorsque Linker tente de lier les fichiers obj. Quelques raisons auxquelles je pourrais penser pour cette erreur sont:

  1. 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.

  2. La fonction / classe dupliquée est définie accidentellement à deux endroits / fichiers différents dans le projet. Supprimez la mauvaise définition.

  3. 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é. :)


9

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;

1
Merci pour cela! Je luttais avec un problème avec un fichier constants.h que je créais lol
Sung Min Kim

1
Merci pour la réponse, moi aussi j'étais confronté au même problème et votre réponse a fonctionné pour moi ...
reetu

1
Merci, je luttais pour ce problème depuis 3-4 heures
Sumit Kumar Saha

9

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!


2
Étape 2: résolu mon problème. Merci :)
Dorald

2

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


2

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!


2

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.


2

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".


Merci beaucoup, je n'avais pas réalisé que j'avais commis cette erreur, cela prenait tout mon temps. Merci encore 👍
Supertecnoboff

1

À 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.


1

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.


0

Pour moi, j'ai créé une méthode appelée sampleMethoddans 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.


0

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.


0

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



0

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 ++


0

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.


0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.