web-dev-qa-db-ger.com

Doppelte Symbole für Architektur arm64

Wenn ich versuche, mein Xcode-Projekt auszuführen, schlägt das Programm fehl und es wird ein Fehler angezeigt, der besagt, dass ich doppelte Symbole habe. Ich habe online nach den Duplikaten gesucht, aber ich hatte kein Glück:

enter image description here

Irgendwelche Ideen, wie man das beheben kann? 

76
user1445205

Aufgrund der Fehler scheint es, dass das FacebookSDK.framework bereits die Klassen Bolts.framework enthält. Entfernen Sie das zusätzliche Bolts.framework aus dem Projekt.

54
picciano

Für mich hat es geholfen, die Compiler-Einstellung "No Common Blocks" auf NO: .__ zu setzen. Es scheint ziemlich sinnvoll zu sein, die Einstellung wird hier erklärt: Wofür wird GCC_NO_COMMON_BLOCKS verwendet?

58
tania_S

Bei Verwendung von Xcode 8 wurde bei der Option "Projekt auf empfohlene Einstellungen aktualisieren" die Option "Keine gemeinsamen Blöcke" für mein Projekt aktiviert.

Wenn Sie es wieder auf OFF stellen, wurde alles repariert.

42
Adam G

Für mich war es, dass ich aus Versehen eine Datei als .m importierte

16
Jason Silver

Wenn Sie zu Xcode 7 oder 8 wechseln und ein wirklich altes Projekt öffnen, ist dieses Problem aufgetreten:

im SomeConstFile.h

NSString * const kAConstant;

im SomeConstFile.m

NSString *const kAConstant = @"a constant";

Frühere Versionen des Compilers gingen davon aus, dass die Definition in der Header-Datei extern war und daher das Einschließen von SomeConstFile.h überall in Ordnung war.

Jetzt müssen Sie diese consts explizit als extern deklarieren:

im SomeConstFile.h

extern NSString * const kAConstant;
9
Dan Loughney

Beim Upgrade auf Xcode 8 erhielt ich eine Nachricht, dass die empfohlenen Einstellungen aktualisiert werden sollen. Ich akzeptierte und alles wurde aktualisiert .. __ Ich fing an, Kompilierzeitprobleme zu bekommen:

Duplikatsymbol für XXXX Duplikatsymbol für XXXX Duplikatsymbol für XXXX

Insgesamt 143 Fehler. Zum Ziel gegangen -> Build-Einstellungen -> Keine gemeinsamen Blöcke -> Setzen Sie es auf NO. Dies löste das Problem. Das Problem war, dass die integrierten Projekte Codeblöcke gemeinsam hatten und daher nicht kompiliert werden konnten. Erklärungen finden Sie hier .

9
iosCurator

Dieser Fehler tritt auf, wenn Linker versucht, die OBJ-Dateien zu verknüpfen. Einige Gründe, die mir für diesen Fehler einfallen könnten, sind:

  1. Die duplizierte Funktion/Klasse wird an zwei verschiedenen Stellen/Dateien im Projekt definiert, und nur eine davon sollte für jede Variation des Build-Befehls kompiliert werden. Aber irgendwie wurden diese beiden Dateien in Ihrem Projekt kompiliert. Sie müssen also Ihre if-else-Bedingungen oder andere Abhängigkeiten überprüfen, die src-Dateien zur Liste der Dateien hinzufügen, die kompiliert werden müssen, und die nicht benötigte Datei für Ihren jeweiligen Build-Befehl entfernen.

  2. Die duplizierte Funktion/Klasse wird versehentlich an zwei verschiedenen Stellen/Dateien im Projekt definiert. Entfernen Sie die falsche Definition.

  3. Bereinigen Sie Ihr OBJ-Verzeichnis, bevor Sie erneut erstellen. In den vorherigen Builds befinden sich möglicherweise alte OBJ-Dateien, die diesen Konflikt verursachen könnten. 

PS: Ich bin kein Experte, aber so habe ich dieses Problem gelöst, als ich es sah. :)

8
ManyuBishnoi

Eine andere Lösung ist:

Wählen Sie Project -> Target -> Build - Phase -> Quelltext übersetzen -> Suche für die Datei, die in der drittletzten Fehlerzeile aufgeführt ist (in Ihrer case BFAppLinkReturnToRefererView.o ).

Dann sehen Sie entweder 1 oder 2 Dateien im Suchergebnis. 

Entferne eine von ihnen und kompiliere erneut . Es sollte jetzt neu kompiliert werden, da nur noch eine Datei vorhanden ist und keine Konflikte mehr beim Erstellen vorhanden sind.

Wenn dies nicht funktioniert, hat die Datei wahrscheinlich Fehler und Sie sollten alle entfernen und neu kompilieren. Es sollte wieder funktionieren.

3
user9168386

Unten Patch arbeiten für mich .. :)

Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No

Zurücksetzen auf NEIN löste das Problem!

3
Saumil Shah

In meinem Fall war der Grund zu dumm: 

Ich hatte eine Constant.h-Datei, in der ich Makros definiert hatte. Ich dachte daran, NSString dort zu machen. und tat das: 

NSString const *kGreenColor = @"#00C34E";

dies verursachte das Problem von Duplicate Symbols for Architecture arm64 und Linker-Befehl mit Exitcode 1 fehlgeschlagen. Das Entfernen der const NSString-Zeile funktionierte für mich.

2
user3693546

Für mich war das Thema der Stil der Erstellung von const, der bis zu diesem iOS8 einwandfrei funktionierte. Ich hatte ein paar Zeilen als:

int const kView_LayoutCount = 3;

in meiner .h-Datei. Sechs Zeilen ergaben 636 Linkerdateien, wenn gemeinsame Blöcke auf NO gesetzt wurden. (14k + wenn JA). Die Zeilen wurden nach dem Entfernen von .h der Wertdeklaration nach .m verschoben, und das Kompilieren war gut.

Hoffe das hilft anderen!

2
drew..

Wenn Sie ein SDK wie FB oder Bibliotheken wie Vuforia oder GoogleAnalytics verwenden, kann das Hinzufügen von Beispielprojekten das Problem verursachen, dass sie bereits Frameworks und ähnliches enthalten. Daher müssen Sie sicherstellen, dass die von Ihnen hinzugefügten Symbole nicht manuell wiederholt werden sind bereits in Proben enthalten

2
IsPha

um dieses Problem zu lösen, gehen Sie zu Build-Phasen und suchen Sie nach doppelten Dateien wie (facebookSDK, unityads) und löschen (Erweiterung file.o) und erstellen Sie sie anschließend erneut. 

1

Aus den Fehlern werden alle Klassen mehrmals angezeigt. Finden Sie heraus, dass die Klassen funktionieren und entfernt werden.

Mache eine AppDelegate.h- und .m-Datei, die mehrere Male erstellt wird. Also wird dieser Fehler auftreten. Endlich diese Klassen finden und entfernen, funktioniert sie gut für mich.

1
Karthickkck

Das Problem für mich war, dass ich manuell ein Framework eingebunden hatte, aber dasselbe Framework dann auch in CocoaPods eingebunden hatte, ohne dass ich es wusste. Nachdem ich das eine oder andere entfernt hatte, verschwand das Problem

0
MobileMon

Für mich erstellte ich eine Methode mit dem Namen sampleMethod in ViewController_A und die gleiche Methode in ViewController_B. Diese Fehlermeldung verursachte diesen Fehler. Dann änderte ich den Methodennamen in ViewController_B in secondSampleMethod. Der Fehler wurde behoben.

Scheint wie eine gute Funktion, um den Code zu reduzieren und denselben Code an vielen Stellen nicht zu duplizieren.

Ich habe versucht, die No-Common-Blöcke von Ja in Nein zu ändern und die Testbarkeit von Ja in Nein zu aktivieren. Es funktionierte nicht. Ich habe doppelte Dateien auch in Erstellungsphasen geprüft, aber es gibt keine doppelten Dateien.

0
R. Mohan

Überprüfen Sie Ihre Include-Datei. Ich hatte dieses Problem, weil ich versehentlich "Dateiname.m" anstelle von "Dateiname.h" importierte. In "Autokorrektur" (Tab) wurde "M" und nicht "H" eingefügt. 

0
Mike Zriel

Dieses Problem trat auf, weil ich in meiner .m-Datei außerhalb einer Methode träge eine Variable definierte. In einer anderen .m-Datei definierte ich eine andere Variable mit demselben Namen außerhalb einer Methode. Dies verursachte ein doppeltes Problem mit globalen Variablennamen.

0
Albert Renshaw