web-dev-qa-db-fra.com

symboles en double pour l'architecture i386 clang

J'ai vu plusieurs articles sur Google et stackoverflow liés à cette erreur, je les ai tous lus mais, malgré le problème, je serais ravi de trouver une solution. Voici le message d'erreur que je reçois lors de la compilation ...

répertoire introuvable pour l'option '-L/Utilisateurs/répertoire_fichiers/Documents/Bharat/copie MyApp/GoogleAdMobAdsSDK' symbole en double _OBJC_CLASS _ $ _ AppDelegate dans:/Utilisateurs/madept/Bibliothèque/Développeur/Xcode/DérivéDonnées/Alpha-dvvymdlmzseytagrosser/l Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

Merci.

56
Bharat

Enfin j'ai eu la solution -

  1. supprime toute la référence du SDK AdMob, que j’ai ajouté (et supprime également de l’espace de travail).
  2. nettoie ton projet
  3. suivez ce lien pour ajouter à nouveau AdMob
  4. nettoyer et reconstruire
2
Bharat

Une autre raison pour laquelle cette erreur se produit souvent est l'importation accidentelle du fichier .m à la place du fichier .h.

234
Rik Smith-Unna

Étapes:

  1. Vérifiez les phases de construction dans les paramètres de cible.
  2. Vérifiez si un fichier existe deux fois ou une fois.
  3. Si le fichier existe deux fois, supprimez-en un. Si ce n'est pas supprimer le fichier dans le bas qui est le dernier.
  4. Construire à nouveau.
57
Desparado_

Juste pour ajouter aux solutions possibles.

Dans mon cas, j'avais accidentellement déclaré et initialisé une variable dans un fichier d'en-tête.

Par exemple, c'est faux:

Monfichier.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant = 6;

CA devrait etre:

Monfichier.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant;

MonFichier.m

#import "MyFile.h"

NSInteger const ABCMyConstant = 6;
25
KyleT

Accédez au paramètre de construction et recherchez No Common Blocks et configurez-le NO . Et construisez à nouveau, vous n'obtiendrez plus cette erreur.

20
Kalpesh Panchasara

J'ai constaté que je recevais l'erreur lorsque j'ai eu const déclaré dans un fichier .m portant le même nom qu'un autre const dans un autre fichier .m. Les deux fichiers incluaient le même fichier parent.

11
reza23

Je viens de vivre cela après avoir recréé une classe de modèle pour Core Data. L'option de menu permettant de créer des classes d'objets a créé une classe de modèle en double. une fois que j'ai enlevé la dupe, l'erreur est partie ...

8
jimmyb

Les erreurs de l'éditeur de liens indiquent toujours un problème lié à l'utilisation d'une bibliothèque ou à des problèmes d'importation.

Parfois, l'erreur se produit lorsque vous avez importé un fichier .m au lieu d'un fichier .h.

Veuillez vérifier votre code et rechercher une instruction d'importation .m dans l'un de vos fichiers d'en-tête (extension .h). J'ai eu un problème similaire et 14 erreurs de symbole dupliqué ont été générées.

Vérifiez si vous avez importé ViewControler.m au lieu de son .h, il doit donc être ainsi:

    import "ViewController.h"

et ton AppDelegate.h devrait être quelque chose comme ceci:

import "UIKit/UIKit.h"
import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) ViewController *mainController;
@end

Rappelez-vous toujours d'importer des fichiers d'en-tête, pas un fichier .m

7
Iman

J'ai eu ce problème avec un cadre qui, je le savais, fonctionnait dans un autre projet. J'avais copié les fichiers de l'autre projet et les avait ajoutés à celui-ci. Ensuite, lors de la construction, j'ai eu 76 erreurs en double.

La solution simple pour moi était de retirer -ObjC de Autres drapeaux de lieur. Le projet précédent n'avait pas cela. Une fois que j'ai fait cela, l'avertissement a disparu et le projet a été construit avec succès.

4
Storm Factory

Si d'autres personnes ont essayé toutes les autres réponses et que cela ne fonctionne toujours pas, essayez d'ouvrir le fichier .xcodeproj avec votre éditeur de texte préféré et de rechercher le nom du cours qui vous pose problème. Assurez-vous de fermer Xcode avant de le faire. Dans le fichier, il devrait y avoir une ligne pour le .h et une autre ligne pour le .m. S'il y a des doublons, supprimez-les, enregistrez le fichier et reconstruisez-le.

4
Jeff Grimes

Une autre raison peut être que le projet vise un simulateur plutôt qu'un périphérique réel lors de la construction d'une version de distribution. Cela provoque également ce message d'erreur.

3
user3095716

J'ai eu cette erreur quand une bibliothèque statique a été incluse dans le projet principal tout en incluant une deuxième bibliothèque qui contenait également une référence à la bibliothèque. C'est assez déroutant, alors peut-être que c'est plus clair.

MyWorkspace + Projet principal + Référence à la bibliothèque 1 + Référence à la bibliothèque 2 + Bibliothèque 1 + Bibliothèque 2 + Référence à la bibliothèque 1

J'ai supprimé la référence à la bibliothèque 1 du projet principal et l'erreur a disparu.

3
Matt Becker

Dans certains cas, vous pouvez également obtenir une erreur "Symboles dupliqués pour l'architecture ..." en raison du fait que vous avez accidentellement déclaré une constante (const) portant le même nom dans deux fichiers différents.

2
Aron

Le moyen le plus simple de résoudre ce problème est le problème Xcode 7.0 ou ce dernier ne modifie aucun bloc commun en NO, cela résoudra votre problème. Essayez cette Cible du projet> Paramètre de construction> Aucun bloc commun, je le modifie en NO.

2

Je l'ai eu où j'ai défini la même fonction C deux fois. Dans deux différents .m des dossiers. Supprimez simplement l'une des définitions et le tour est joué.

1
Rob Sanders

J'ai essayé de nettoyer le projet, effacé toutes les données dérivées. Rien n'a fonctionné. Atlas, cela a fonctionné pour moi.

enter image description here

Une autre raison peut être que le projet vise un simulateur plutôt qu'un périphérique réel lors de la construction d'une version de distribution. Cela provoque également ce message d'erreur.

1
A.G

J'ai eu cette erreur après avoir copié-collé un fichier de test dans le projet, en oubliant de changer le nom de l'interface et les lignes d'implémentation:

@interface TDInputValidationsTests : XCTestCase

et

@implementation TDInputValidationsTests

Erreur stupide ... Je suggère également de consulter l'onglet "phases de construction" du projet pour vérifier les doublons. Supprimer les données dérivées et créer une nouvelle génération peut également aider.

0

Tiré de https://stackoverflow.com/a/2755581/190599

Ce que vous pouvez faire est de mettre dans votre en-tête (MyConstants.h):

extern const int MyConstant;
extern NSString * const MyStringConstant;

Et dans un fichier source, incluez l'en-tête ci-dessus mais définissez les constantes (MyConstants.m):

const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";

Ensuite, vous devez simplement inclure l'en-tête dans tout autre fichier source utilisant l'une de ces constantes. L'en-tête déclare simplement que ces constantes existent quelque part, de sorte que le compilateur ne se plaindra pas, car c'est à l'éditeur de liens qu'il incombe de résoudre ces noms de constantes. Le fichier source contenant vos définitions de constantes est compilé et l'éditeur de liens constate que les constantes se trouvent à cet emplacement et résout toutes les références trouvées dans les autres fichiers source.

Le problème avec la déclaration et la définition d'une constante dans un en-tête (non déclaré comme static) est que le compilateur la traite comme une variable globale indépendante pour chaque fichier contenant cet en-tête. Lorsque l'éditeur de liens tente de relier toutes vos sources compilées, il rencontre le nom global autant de fois que vous avez inclus MyConstants.h.

0
CodeReaper

J'ai eu la même erreur lors de la configuration d'OCMock. Je l'ai corrigé en ajoutant le libOCMock.a dans la section 'Copier les fichiers' de Building Phase

0
Eric

J'ai importé des fichiers d'un autre projet, il avait aussi le fichier main.m. Donc dans l’ensemble, j’avais deux fichiers main.m, en supprimer un a résolu le problème pour moi.

0
Sikander

C'était différent pour moi, j'ai copié les méthodes d'implémentation de classe telles quelles et les iVars ont également été copiés ... donc dans le monde d'iVars, il y a deux ensembles et le compilateur n'arrêtait pas de se plaindre des ivars en double avant de lier les fichiers * .o .

la lecture du résultat a aidé à supprimer tous les ivars en double ... grâce à la nouvelle fonctionnalité qui vous évite de @ synthétiser toutes vos propriétés ... l'erreur a disparu ...

0
Sanjeev

J'ai eu ce problème et j'ai été coincé pendant un moment. Le problème pour moi a été que j’ai écrit un booléen dans le fichier .h (entre #import et @interface) et que je les ai utilisés dans mon fichier .m

Je les ai simplement supprimés de mon fichier .h et je les ai copiés au même endroit dans mon fichier .m et la construction a réussi.

0
Red.A

Parfois, croyez-le ou non, Xcode visse le fichier de projet. La seule solution que nous avons trouvée consistait à supprimer manuellement toutes les références au fichier incriminé à l'aide d'un éditeur de texte, puis à rajouter les fichiers dans Xcode.

0
SomaMan

Note to self: "LISEZ L'ERREUR!"

Dans mon cas, cela dit ceci: duplicate symbol _OBJC_CLASS_$_SATCoreData in:

Traduction: une classe Objective C appelée SATCoreData est dupliquée.

Ensuite, il donne le chemin aux deux occurrences du symbole. La lecture du chemin pointe vers les deux fichiers de classe se terminant par .o. Si vous regardez les deux classes, vous trouverez quelque chose de louche. Dans mon cas, j'avais accidentellement donné le même nom à deux classes. Une classe que j'avais dans le fichier d'une autre classe parce que je testais quelque chose et que j'étais trop paresseux pour créer une classe séparée. J'espère que ça aide quelqu'un.

0
smileBot