it-swarm.com.de

Doppelte Symbole für Architektur x86_64 unter Xcode

Ich habe jetzt dieselbe Frage mit obigem Titel, aber noch nicht die richtige Antwort gefunden. Ich habe den Fehler erhalten:

    /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)

Jede Hilfe wird geschätzt.

Zum Schluss Ich finde den Grund für diesen Fehler heraus. Ich habe -ObjC zum Other Linker Flags hinzugefügt. Nach dem Entfernen dieses Wertes kann ich mein Projekt erfolgreich erstellen, weiß aber nicht warum. Kann das jemand erklären?

172
lee

75 doppelte Symbole für die Architektur x86_64

Bedeutet, dass Sie die gleichen Funktionen zweimal geladen haben. Wenn das Problem nach dem Entfernen von -ObjC aus Other Linker Flags, .__ verschwunden ist, bedeutet dies, dass diese Option dazu führt, dass die Funktionen zweimal geladen werden:

von Technischen Fragen und Antworten

Dieses Flag bewirkt, dass der Linker jede Objektdatei in der Bibliothek lädt das definiert eine Objective-C-Klasse oder -Kategorie. Während dieser Option wird führt in der Regel zu einer ausführlicheren ausführbaren Datei (aufgrund des zusätzlichen in die Anwendung geladenen Objektcodes ). Dies ermöglicht die erfolgreiche Erstellung von effektive statische Objective-C-Bibliotheken, die Kategorien unter .__ enthalten. vorhandene Klassen.

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

88
David V

Durch das Ändern von 'No Common Blocks' von Yes in No (unter Targets-> Build Settings-> Apple LLVM - Code Generation) wurde das Problem behoben.

235

Dummes, aber stellen Sie sicher, dass Sie nicht #imported eine .m-Datei irgendwo versehentlich eingegeben haben

230
Adam Waite

In meinem Fall habe ich gerade eine Header-Datei erstellt, um konstante Zeichenfolgen wie folgt zu definieren:

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

Ich habe dieses Szenario mit static gelöst:

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

Ich habe dasselbe Problem ... In Xcode 7.2 unter Pfad Projektziel> Einstellungen erstellen> Keine gemeinsamen Blöcke. Ich ändere es in NEIN.

31
Dr. chamran

Dies trat bei mir auf, als ich das Popup "empfohlene Einstellungen" für ein Projekt akzeptierte, das ich vor zwei Jahren in Objective-C entwickelte.

Das Problem bestand darin, dass Xcode beim Akzeptieren des Updates "empfohlene Einstellungen" einige Build-Einstellungen, einschließlich GCC_NO_COMMON_BLOCKS = YES;, automatisch geändert oder hinzugefügt hat.

Dies führte dazu, dass der Build mit dem Fehler duplicate symbol in meinem aktualisierten Projekt fehlgeschlagen ist. Also änderte ich No Common Block in NO in meinen Build-Einstellungen und der Fehler war weg.

27
Blaszard

Dies geschieht auch, wenn Sie konstante Variablen mit demselben Namen in verschiedenen Klassen deklarieren:

in der Datei Message.m

const int kMessageLength = 36;

@implementation Message

@end

in der Datei Chat.m

const int kMessageLength = 20;

@implementation Chat

@end
27
Luca Davanzo

Ich fand die akzeptierte Antwort berührt das Problem, hat mir aber nicht geholfen, es zu lösen. Hoffentlich hilft diese Antwort bei diesem sehr frustrierenden Problem.

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"Bedeutet, dass Sie dieselben Funktionen zweimal geladen haben. Wenn das Problem nach dem Entfernen von -ObjC aus den anderen Linker-Flags behoben wird, bedeutet dies, dass diese Option dazu führt, dass die Funktionen zweimal geladen werden:"

Laienbedeutend bedeutet dies, dass wir in unserem Projekt zwei Dateien mit genau demselben Namen haben. Vielleicht kombinieren Sie ein Projekt in ein anderes? Sehen Sie sich die Fehler über dem Fehler "Symbole duplizieren" an, um zu sehen, welcher Ordner dupliziert ist. In meinem Fall war es BLoginViewController.

Im Bild unten sehen Sie zum Beispiel, dass ich zwei BImageViewControllers habe, die für mich das Problem waren.

Sobald ich einen gelöscht habe, ist das Problem verschwunden :)

enter image description here

26
simon_smiley

Entfernen Sie -ObjC von den anderen Linker-Flags oder Überprüfen Sie, ob Sie versehentlich eine .m-Datei anstelle von .h importiert haben.

13
CKR666

Die folgenden Schritte haben das Problem für mich gelöst.

  1. Gehen Sie zu Build-Phasen in den Zieleinstellungen.
  2. Gehen Sie zu "Binär mit Bibliotheken verknüpfen".
  3. Überprüfen Sie, ob eine der Bibliotheken zweimal vorhanden ist.
  4. Bauen Sie erneut auf.
12
pigeon

Der schnellste Weg, das Duplikat zu finden, ist:

  1. Gehen Sie zu Ziele
  2. Gehen Sie zu Build-Phasen
  3. Gehen Sie zu Quellen kompilieren
  4. Löschen Sie doppelte Dateien.
12
J. Goce

Das Definieren derselben Variablen unter @implementation in mehr als einer Klasse kann dieses Problem ebenfalls verursachen.

9
Shree

In meinem Fall befanden sich am selben Ort zwei Dateien mit demselben Namen 

Ziele> Phasen erstellen> Quellen kompilieren und doppelte Dateien löschen.

8
Nij

Meine Situation mit einem älteren Projekt, das in Xcode 7.3 geöffnet wurde, war:

duplicate symbol _SomeEnumState in:

gefolgt von einer Liste von zwei nicht zusammenhängenden Dateien.

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

Was für mich gelöst wurde, war die Änderung der Enum-Deklaration von:

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

zu diesem:

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

Wenn jemand eine Erklärung dafür hat, klären Sie mich bitte auf.

8
tadija

Für mich während der von Xcode8 empfohlenen Projekteinstellungen, aktualisieren Sie "No Common Blocks" auf YES, was dieses Problem verursacht. 

5
Naveen Shan

stellen Sie in den Build-Einstellungen "No common blocks" als NO ein. Für mich geht das

4

Ähnlich wie bei Juice007 hatte ich eine Variable vom Typ C in zwei verschiedenen .m-Dateien (die nicht importiert wurden) deklariert und initialisiert.

BOOL myVar = NO;

diese Methode des Deklarierens und Initialisierens einer Variablen, selbst in .m, sogar in @implementation, gewährt ihr jedoch globalen Gültigkeitsbereich. Ihre Optionen sind:

  1. Deklarieren Sie es als statisch, um den Gültigkeitsbereich auf Klassen zu beschränken:

    static BOOL myVar = NO;
    
  2. Entfernen Sie die Initialisierung (wodurch die beiden Klassen die globale Variable gemeinsam nutzen):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
    
  3. Deklarieren Sie es als Eigenschaft: 

    @property BOOL myVar;
    
  4. Deklarieren Sie es in der @ Schnittstelle als richtige iVar

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

Ich habe die gleiche Fehlermeldung erhalten, als ich ein Pod-Repository hinzugefügt habe 

pod 'SWRevealViewController'

für einen bereits hinzugefügten Quellcode (SWRevealViewController) von gitHub. Der Fehler wird also behoben, indem entweder der Quellcode oder das Pod-Repository entfernt wird.

Fall 2:

Beim zweiten Mal trat dieser Fehler auf, wenn ich eine Konstante in .h datei deklariere.

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

Heute habe ich den gleichen Fehler bekommen. Das Schlüsselwort des Fehlers lautet duplicate. Ich repariere es durch:

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

Stellen Sie sicher, dass Sie nicht aus Versehen eine .m-Datei importiert haben. Möglicherweise möchten Sie die abgeleiteten Daten im Projektfenster löschen und anschließend erneut erstellen und ausführen.

3
JohnVanDijk

Für alle anderen, die dieses Problem haben, habe ich in keiner dieser Antworten meine Lösung gesehen.

Nachdem es einen .pbxproj-Mischkonflikt gab, der manuell (wenn auch schlecht) angesprochen wurde, gab es doppelte Verweise auf einzelne Klassendateien in .pbxproj. Durch das Löschen dieser Elemente aus dem Projekt> Phasen erstellen> Quellen kompilieren wurde alles für mich behoben.

Hoffe, das hilft jemandem auf der ganzen Linie.

3
Bengovernment

Keine der oben genannten Lösungen funktioniert für mich, ich habe sie einfach selbst repariert.

Ich habe ein doppeltes Symbol für meinen core data model erhalten, den ich selbst mache, aber In meinem .xcdatamodeld-Inspektor wähle ich Class Definition der Codegen-Eigenschaft. Dann wähle ich Manual/None, es wurde behoben.

Hoffe das kann hilfreich für Sie sein!

2
foolishBoy

In Xcode 6.3.2. Ich habe alle Möglichkeiten wie unten angegeben geprüft

1: Ich habe keine .m-Datei in mein Projekt importiert.

2: -ObjC aus Other-Linker-Flag entfernt.

3: Alle meine abgeleiteten Daten wurden entfernt.

ich bekomme immer noch den gleichen Fehler. Ich habe diesen Fehler behoben, indem ich eine Variablendeklaration aus der .pch-Datei entfernte. In meinem Fall habe ich AppDelegate object in der .pch-Datei deklariert. Endlich fand ich den Grund für diesen Fehler. Also entferne ich die Deklaration aller Variablen aus der .pch-Datei und meinem Projektarbeitszauber.

2
Jatin Patel

Ein weiterer dummer Fehler, der diesen Fehler verursacht, ist die Wiederholung von Dateien. Ich habe versehentlich zweimal Dateien kopiert. Zuerst ging ich zu Ziele -> Phasen erstellen -> Quellen kompilieren. Dort habe ich einige Dateien auf dieser Liste zweimal und ihre Speicherorte bemerkt. 

2
Andrew McKinley

Ich habe auch diesen Fehler heute. Das liegt daran, dass ich einen const-Wert in einer .m-Datei definiert habe. Aber ich habe eine weitere .m-Datei definiert, die auch diesen const-Wert enthielt Meine Lösung fügt vor dem const-Wert ein Schlüsselwort "static" hinzu. Beispiel:

static CGFloat const btnConunt = 9;

Und dann baue ich das Projekt, es wird diesen Fehler nicht melden.

2
Juice007

Ich habe den gleichen Fehler wie ich

1.Kopiere die doppelte Symboldatei (Klassenname oder Frameworkname) vom Ende, das gerade oberhalb der Zeile angezeigt wird (doppelte Symbole für Architektur x86_64).

2. Fügen Sie es in den Find Navigator ein und drücken Sie die Eingabetaste

Es zeigte mir doppelten Unterricht. Ich entferne die doppelte Klasse und führe erfolgreich aus.

2
GSK

Ich hoffe es wird dir definitiv helfen

Ich habe denselben Fehler 3 doppelte Symbole für Architektur x86_64  

in meinem Fall habe ich Code aus einer anderen Datei desselben Projekts kopiert, z. Code der A. m-Datei in B.m und nach der Fertigstellung bekam ich einen Fehler wie erwähnt. und ich habe Fehler behoben, indem ich den Namen der globalen Variablen ändere. 

dieser Fehler ist in meinem Fall auf dieselbe Deklaration für die globale Variable in beiden Dateien zurückzuführen.

Dasselbe Problem tritt bei mir auf, als ich das Lob-Projekt in mein Projekt integriert hatte.

enter image description here

Lob project hat eigentlich auch die AFNetworking-Dateien.

enter image description here

Tatsächlich stehen .m-Dateien in Konflikt mit den Dateien Mein Projekt POd/AFNetworking/.m

enter image description here

2
abdulrauf618

Dieser Fehler tritt im Allgemeinen auf, wenn Sie eine Bibliothek oder Datei zweimal verknüpft haben. In der Fehlerbeschreibung wird der Name der duplizierten Datei aufgeführt. Sie können suchen und sicherstellen, dass keine Duplikate vorhanden sind. Wenn Sie Duplikate finden, entfernen Sie den Verweis auf eines davon, um sicher zu gehen

2
Arthi

1. Gehen Sie zum Erstellen von Phasen2. Suchen Sie nach dem Dateinamen 

Wenn dies nicht der Fall ist, suchen Sie nach "file.m". Wenn Sie #import "file.m" sehen, löschen Sie diese Zeile

2
jonypz

Vor kurzem hatte Kopfschmerzen die Suche nach einer Fehlerquelle. Ich wunderte mich, als ich herausfand, dass meine App nicht kompilieren will, einfach weil ich folgendes Code-Snippet in verschiedenen Klassen hatte:

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;
}

Hoffe das könnte jemandem helfen.

2
Evgeniy Kleban

In meinem Fall hatte ich zwei main()-Methoden in meinem Projekt definiert, und das Entfernen einer davon löste das Problem.

Entfernen Sie -all_load von anderen Linker-Flags. Es funktioniert bei meinem Projekt

1
codaman

Stellen Sie sicher, dass Sie [ViewController.m] nicht anstelle der Header-Datei importieren

#import "ViewController.m"
1
WonderX

Diese Antwort erklärt gut, warum dieses Problem auftritt:

Xcode C++ :: Doppelte Symbole für Architektur x86_64

Meiner Meinung nach müssen Sie keine der Flags ausschalten oder Xcode-Einstellungen ändern, Ihren Code erneut lesen und das Problem beheben. Das Ändern der Einstellungen würde die Entzündung und nicht die Ursache abschwächen.

1
Mudit Verma

Können Sie versuchen, alle Plugins im Plugin-Ordner zu löschen?

Es ist für mich gearbeitet

0
Ferhat KOÇER

Bitte erkundigen Sie sich bei dem Pod und den Bibliotheken, die Sie hinzugefügt haben. Es sollten eine oder mehrere Bibliotheken wiederholt werden. Bitte entfernen Sie es von einer Seite. Ich werde das Problem beheben. Die betroffene Bibliothek wird im Detail der X-Code-Fehlermeldung aufgelistet.

0
Jebin Benny

In meinem Fall benannte ich eine Entität meines Kerndatenmodells genauso wie ein Objekt .. __ Also: Ich definierte ein Objekt "Event.h" und gleichzeitig hatte ich diese Entität "Event". Ich habe die Entität umbenannt.

0
Sjakelien

Dieser Fehler ist mir passiert, als ich eine Klassenmethode mit einem Bereichsauflösungsoperator in der Datei header anstelle von .cpp implementiert habe. 

PS: Und ich habe in C++ auf dem Macbook Yosemite programmiert.

0
eneski