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?

Picciano
la source
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.

Picciano
la source
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?

tania_S
la source
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é.

Adam G
la source
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

Jason Silver
la source
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
Matea
la source
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.


la source
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 .

iosCurator
la source
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é. :)

ManyuBishnoi
la source
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;
Dan Loughney
la source
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!

Saumil Shah
la source
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

IsPha
la source
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!

a dessiné..
la source
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.


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

Mike Zriel
la source
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.

Karthickkck
la source
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.

Mahmoud abualamrien
la source
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.

R. Mohan
la source
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.

Albert Renshaw
la source
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

MobileMon
la source
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 ++

Manish Gupta
la source
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.

Dx_
la source
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

Dnyaneshwar Shinde
la source