web-dev-qa-db-fra.com

Symboles en double pour l'architecture x86_64 sous Xcode

J'ai maintenant la même question avec le titre ci-dessus mais je n'ai pas encore trouvé la bonne réponse. J'ai eu l'erreur:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Toute aide est appréciée.

Enfin Je découvre la raison de cette erreur car j'ai ajouté -ObjC au Other Linker Flags. Après avoir supprimé cette valeur, je peux construire mon projet avec succès, mais je ne sais pas pourquoi. Quelqu'un peut-il expliquer cela?

172
lee

75 symboles en double pour l'architecture x86_64

Cela signifie que vous avez chargé deux fois les mêmes fonctions. Comme le problème disparaît après la suppression de -ObjC de Other Linker Flags, , Cela signifie que cette option entraîne le chargement de deux fois:

de Q & A technique

Cet indicateur force l'éditeur de liens à charger chaque fichier objet de la bibliothèque qui définit une classe ou une catégorie Objective-C. Alors que cette option sera Le résultat est généralement un exécutable plus volumineux (en raison du code objet supplémentaire chargé dans l'application), cela permettra la création réussie de bibliothèques statiques Objective-C efficaces contenant des catégories sur classes existantes.

https://developer.Apple.com/library/content/qa/qa1490/_index.html

88
David V

Pour moi, le remplacement de Yes par No (non commun) par Block Blocks (sous Targets-> Build Settings-> Apple LLVM - Code Generation) a résolu le problème.

235
Linda MacPhee-Cobb

Stupide, mais assurez-vous que vous n'avez pas #imported un fichier .m par erreur quelque part

230
Adam Waite

Dans mon cas, je viens de créer un fichier d'en-tête pour définir des chaînes constantes comme ceci:

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

J'ai résolu ce scénario en utilisant static:

static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";
44
Sauvik Dolui

J'ai le même problème . Dans Xcode 7.2 dans le chemin du projet Cible> Paramètre de construction> Pas de bloc commun, je le change en NO.

31
Dr. chamran

Cela m’est arrivé lorsque j’ai accepté la «fenêtre de configuration recommandée» d’un projet que j’ai développé il ya deux ans en Objective-C.

Le problème était que lorsque vous avez accepté la mise à jour des "paramètres recommandés", Xcode a modifié ou ajouté automatiquement certains paramètres de construction, notamment GCC_NO_COMMON_BLOCKS = YES;.

Cela a rendu la construction a échoué avec l'erreur duplicate symbol dans mon projet mis à jour. J'ai donc changé No Common Block en NO dans mes paramètres de construction et l'erreur a disparu.

27
Blaszard

Cela se produit également lorsque vous déclarez des variables const avec le même nom dans une classe différente:

dans le fichier Message.m

const int kMessageLength = 36;

@implementation Message

@end

dans le fichier Chat.m

const int kMessageLength = 20;

@implementation Chat

@end
27
Luca Davanzo

J'ai trouvé que la réponse acceptée touchait le problème, mais ne m'aidait pas à le résoudre. J'espère que cette réponse aidera à résoudre ce problème très frustrant.

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"Cela signifie que vous avez chargé deux fois les mêmes fonctions. Comme le problème disparaît après la suppression de -ObjC d'autres indicateurs de lieur, cela signifie que cette option entraîne le chargement de deux fois:"

En termes simples, cela signifie que nous avons deux fichiers dans notre projet avec exactement le même nom. Peut-être combinez-vous un projet dans un autre? Examinez les erreurs ci-dessus l'erreur "symboles en double" pour voir quel dossier est dupliqué. Dans mon cas, il s'agissait de BLoginViewController.

Par exemple, dans l'image ci-dessous, vous pouvez voir que j'ai deux BImageViewControllers. Pour moi, c'est ce qui était à l'origine du problème.

Dès que j'en ai effacé un, le problème a disparu :)

enter image description here

26
simon_smiley

Supprimez -ObjC d'autres drapeaux de l'éditeur de liens ou Vérifiez que vous avez importé un fichier .m au lieu de .h par erreur.

13
CKR666

Les étapes suivantes ont résolu le problème pour moi.

  1. Accédez à Construire les phases dans les paramètres de cible.
  2. Allez à «Link Binary With Libraries».
  3. Vérifiez si l'une des bibliothèques existe deux fois.
  4. Construire à nouveau.
12
pigeon

Le moyen le plus rapide de trouver le duplicata est:

  1. Aller aux cibles
  2. Aller aux phases de construction
  3. Aller à la compilation des sources
  4. Supprimer les fichiers en double.
12
J. Goce

Définir la même variable sous @implementation dans plusieurs classes peut également être à l'origine de ce problème.

9
Shree

Dans mon cas, il y avait deux fichiers du même nom à l'emplacement 

Cibles> Phases de construction> Compiler les sources et supprimer tous les fichiers en double.

8
Nij

Ma situation avec un projet hérité ouvert dans Xcode 7.3 était:

duplicate symbol _SomeEnumState in:

suivi de la liste de deux fichiers.no non liés, puis cela a été répété plusieurs fois, puis finalement:

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Ce qui a résolu le problème pour moi a été de changer la déclaration enum de:

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

pour ça:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

Si quelqu'un a une explication à cela, veuillez m'éclairer.

8
tadija

Pour moi, pendant le Xcode8, les paramètres de projet recommandés mettent à jour "No Common Blocks" sur YES, ce qui provoque ce problème. 

5
Naveen Shan

dans les paramètres de construction, définissez "Pas de blocs communs" sur NO. Ça marche pour moi

4
Deepak Sasindran

Comme pour Juice007, j'avais déclaré et initialisé une variable de type C dans deux fichiers .m différents (non importés!).

BOOL myVar = NO;

cependant, cette méthode de déclaration et d'initialisation d'une variable, même en .m, même dans @implementation, lui confère une portée globale. Vos options sont:

  1. Déclarez-le comme statique, pour limiter la portée à la classe:

    static BOOL myVar = NO;
    
  2. Supprimez l'initialisation (ce qui obligera les deux classes à partager la variable globale):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
    
  3. Déclarez-le comme une propriété: 

    @property BOOL myVar;
    
  4. Déclarez-le comme un iVar approprié dans @interface

    @interface myClass(){
        BOOL myVar;
    }
    @end
    
3
Mars

J'ai eu la même erreur quand j'ai ajouté un référentiel de pod 

pod 'SWRevealViewController'

pour un code source déjà ajouté (SWRevealViewController) à partir de gitHub. Ainsi, l'erreur sera corrigée en supprimant le code source ou le référentiel de pod.

Cas n ° 2:

La deuxième fois, cette erreur est apparue lorsque je déclarais une constante dans le fichier .h .

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...
3
zeeawan

Aujourd'hui, j'ai la même erreur. La clé de l'erreur Word est duplicate. Je le répare par:

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

 remove reference

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear
3
guozqzzu

Assurez-vous que vous n'avez pas importé un fichier .m par accident. Vous voudrez peut-être supprimer vos données dérivées dans la fenêtre Projets, puis créer et exécuter à nouveau.

3
JohnVanDijk

Pour quiconque ayant ce problème, je n'ai vu ma résolution dans aucune de ces réponses.

Après avoir eu un conflit de fusion .pbxproj qui a été résolu manuellement (bien que mal), il y avait des références en double à des fichiers de classe individuels dans .pbxproj. Supprimer ceux du projet> Construire les phases> Compiler les sources a tout corrigé pour moi.

J'espère que cela aide quelqu'un en bout de ligne.

3
Bengovernment

Aucune des solutions ci-dessus ne fonctionne pour moi, je viens de le réparer moi-même.

J'ai le symbole en double de mon core data model que je fabrique moi-même, mais Dans mon inspecteur .xcdatamodeld, je choisis Class Definition de la propriété Codegen, je suppose que c'est ce qui ne va pas. Ensuite, j'ai choisi Manual/None, cela a été corrigé.

J'espère que cela peut être utile pour vous!

2
foolishBoy

Dans Xcode 6.3.2. J'ai vérifié toutes les possibilités comme ci-dessous

1: Je n'ai pas importé de fichier .m dans mon projet.

2: Supprimé -ObjC de Autre indicateur d'éditeur de liens .

3: Suppression de tous mes dériver Data .

je reçois toujours la même erreur. J'ai supprimé cette erreur en supprimant toute déclaration de variable du fichier .pch. dans mon cas, j'ai déclaré l'objet AppDelegate dans le fichier .pch. enfin j'ai trouvé la raison qui cause une erreur. donc je supprime la déclaration de toute variable du fichier .pch et mon charme de travail de projet.

2
Jatin Patel

Une autre erreur stupide qui causera cette erreur est des fichiers répétés. J'ai accidentellement copié deux fichiers deux fois. Je suis d'abord allé à Cibles -> Construire les phases -> Compiler les sources. Là, j'ai remarqué deux fois des fichiers sur cette liste et leurs emplacements. 

2
Andrew McKinley

J'ai aussi cette erreur aujourd'hui.C'est parce que j'ai défini une valeur const dans un fichier .m.Mais j'ai défini un autre fichier .m qui contenait également cette valeur const.Cela signifie qu'il a deux mêmes valeurs const.So cette erreur apparaît . ma solution ajoute un mot clé "static" avant la valeur constante, telle que:

static CGFloat const btnConunt = 9;

Et puis je construis le projet, il ne signalera pas cette erreur.

2
Juice007

Je fais face à la même erreur que ce que j'ai fait

1.Copiez le fichier de symboles dupliqué (nom de classe ou nom de structure) à partir de la fin indiquée ci-dessus au dessus de la ligne (symboles dupliqués pour l'architecture x86_64).

2. Collez-le dans Find Navigator et appuyez sur enter

Il m'a montré la classe en double. Je supprime la classe en double et cours avec succès.

2
GSK

J'espère que ça va certainement t'aider

J'ai la même erreur 3 symboles en double pour l'architecture x86_64  

dans mon cas, j'ai copié le code d'un autre fichier du même projet, par exemple. code du fichier A.m à B.m et après complilation j'ai eu une erreur comme mention. et j'ai résoudre l'erreur en changeant le nom de la variable globale. 

cette erreur est arrivée dans mon cas à cause de la même déclaration pour la variable globale dans les deux fichiers.

2

Le même problème se produit avec moi, lorsque j'intégrais le projet Lob dans mon projet.

enter image description here

En fait, le projet lob contient également les fichiers AFNetworking, Je supprime donc les fichiers .m du projet lob.

enter image description here

En fait, les fichiers .m sont en conflit avec les fichiers My project POd/AFNetworking/.m

enter image description here

2
abdulrauf618

Cette erreur se produit généralement lorsque vous avez lié deux fois une bibliothèque ou un fichier. Dans la description d'erreur, le nom du fichier dupliqué sera répertorié. Vous pouvez effectuer une recherche et vous assurer que vous n'avez pas de doublons. Si vous trouvez des doublons, supprimez la référence à l'un d'eux pour jouer en toute sécurité

2
Arthi

1. Allez à Build Phases2.Recherchez le nom du fichier 3. Supprimez la copie -> L'erreur disparaîtra. 

Si ce n'est pas le cas, essayez de rechercher "fichier.m", si vous voyez un fichier "import", "fichier.m", effacez cette ligne.

2
jonypz

Récemment eu un mal de tête à la recherche d'une source d'erreur. Je me suis demandé, quand j'ai découvert que mon application ne voulait pas compiler, simplement parce que j'avais l'extrait de code suivant dans différentes classes:

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

J'espère que cela pourrait aider quelqu'un.

2
Evgeniy Kleban

Dans mon cas, deux méthodes main() ont été définies dans mon projet et la suppression d’une méthode a résolu le problème.

1

Supprimez -all_load des autres drapeaux de l'éditeur de liens. Ça marche sur mon projet

1
codaman

Assurez-vous de ne pas importer [ViewController.m] à la place du fichier d'en-tête.

#import "ViewController.m"
1
WonderX

Cette réponse explique bien pourquoi ce problème se produit:

Xcode C++ :: Symboles en double pour l'architecture x86_64

À mon avis, il n'est pas nécessaire de désactiver les indicateurs, de modifier les paramètres Xcode, de relire votre code et de résoudre le problème. Changer les réglages atténuerait l'inflammation et non la cause.

1
Mudit Verma

Pouvez-vous essayer d'effacer tous les plugins dans le dossier des plugins?

C'est travaillé pour moi

0
Ferhat KOÇER

Veuillez vérifier auprès du module et des bibliothèques que vous avez ajoutées. Il devrait y avoir une ou plusieurs bibliothèques sont répétés. Veuillez l'enlever d'un côté. Je vais résoudre le problème. Et la bibliothèque concernée sera listée dans le détail du message d'erreur x-code.

0
Jebin Benny

Dans mon cas, j'ai nommé une entité de mon modèle de données principal de la même manière qu'un objet . Donc: j'ai défini un objet "Event.h" et, en même temps, j'avais cette entité appelée "Evénement". J'ai fini par renommer l'entité.

0
Sjakelien

Cette erreur m'est arrivée lorsque j'ai implémenté une méthode de classe avec un opérateur de résolution d'étendue dans le fichier entête au lieu de .cpp fichier. 

PS: Et je programmais en C++ sur Macbook Yosemite.

0
eneski