Doppelte Symbole für Architektur arm64


103

Wenn ich versuche, mein Xcode-Projekt auszuführen, schlägt ein Fehler fehl, der besagt, dass ich doppelte Symbole habe. Ich habe online gesucht, wo diese Duplikate gefunden wurden, hatte aber kein Glück:

Geben Sie hier die Bildbeschreibung ein

Irgendwelche Ideen, wie man das behebt?


1
es bedeutet, dass Sie zu viel von BFAppLinkReturnToRefererView
Andrey Chernukha

Möglicherweise möchten Sie Ihr Projekt auch ein wenig bereinigen, anstatt eine Verknüpfung zu Frameworks auf Ihrem Desktop herzustellen. :)
Picciano

In meinem Fall habe ich extern NSString * const tColor hinzugefügt; in .h-Datei und NSString const * tColor = @ "# 000022"; in zwei verschiedenen .m Klassen.
ios_dev

Sie können finden, wonach Sie suchen hier stackoverflow.com/a/46678210/988941
MoOx

Antworten:


65

Aus den Fehlern geht hervor, dass das FacebookSDK.framework bereits die Bolts.framework-Klassen enthält. Versuchen Sie, das zusätzliche Bolts.framework aus dem Projekt zu entfernen.


22
wie man? Können Sie mich bitte Schritt für Schritt führen
Imdad Ali

68

Für mich hat es geholfen, die Compilereinstellung "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?


Du bist der Mann! Ich habe gerade ein neues xCode 7.3.1-Projekt erstellt und die Standardeinstellung ist YES :(
Yaro

4
Diese Option wurde für mich durch das Xcode-Fenster "Projekt auf empfohlene Einstellungen aktualisieren" aktiviert.
Commscheck

Sie sind die besten
Showmyroutes

unbezahlbarer Tipp, aber doh hat in meinem Fall nicht geholfen! : O
Fattie

49

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

Durch Zurückschalten auf OFF wurde alles repariert.


2
Aktualisieren Sie das Projekt auf die empfohlenen Einstellungen. Wie mache ich das? Ich meine aus welchem ​​Menü?
Sazzad Hissain Khan

@SazzadHissainKhan Es ist in Ihren Build-Einstellungen.
Reise

21

Für mich war es, dass ich versehentlich eine Datei als .m importiert habe, nicht als .h


Das ist LOL, aber wahr; D
Vladimir

Das ist mir gerade passiert. Ich beschuldige die Vervollständigung des Codes für alles
user426132

20

Ich habe meine Pods beim Downgrade eines Pods durcheinander gebracht und es geschafft, das Problem mit doppelten Symbolen für die Architektur arm64 zu beheben, indem ich die Pods entfernt und erneut installiert habe mit:

pod deintegrate
pod install

Ich habe das über CocoPods - 3.9.0 integrierte Google Places SDK verwendet, und diese Antwort hat mein Problem behoben.
Andrewlundy

11

Eine andere Lösung ist:

Wählen Sie Projekt -> Ziel -> Erstellungsphase -> Quelle kompilieren -> Suche nach der Datei, die in der vorletzten Fehlerzeile angegeben ist (in Ihrem Fall BFAppLinkReturnToRefererView.o ).

Dann sehen Sie entweder 1 oder 2 Dateien im Suchergebnis.

Entfernen Sie eine davon und kompilieren Sie sie erneut . Es sollte jetzt neu kompiliert werden, da nur noch eine Datei übrig ist und keine Konflikte mehr für die Erstellung bestehen.

Wenn das nicht funktioniert, enthält die Datei wahrscheinlich Fehler, und Sie sollten alle entfernen und dann neu kompilieren. Es sollte wieder funktionieren.


2
Extrem unterschätzte Antwort, danke für deine Hilfe, Lukas! :)
patreu22

Kein Problem froh, dass es Ihr Problem gelöst hat :)

10

Beim Upgrade auf Xcode 8 wurde die Meldung angezeigt, dass ein Upgrade auf die empfohlenen Einstellungen durchgeführt werden soll. Ich habe zugesagt und alles wurde aktualisiert. Ich bekam ein Problem mit der Kompilierungszeit:

Doppeltes Symbol für XXXX Doppeltes Symbol für XXXX Doppeltes Symbol für XXXX

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


9

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 von ihnen sollte für eine 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 zu kompilierenden Dateien hinzufügen, und die nicht benötigte Datei für Ihren speziellen 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. Möglicherweise befinden sich dort alte obj-Dateien aus Ihren vorherigen Builds, die diesen Konflikt verursachen könnten.

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


9

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 war es in Ordnung, SomeConstFile.h überall einzuschließen.

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

im SomeConstFile.h

extern NSString * const kAConstant;

1
Danke dafür! Ich hatte Probleme mit einer constants.h-Datei, die ich erstellt habe. Lol
Sung Min Kim

1
Vielen Dank für die Antwort Ich war auch mit dem gleichen Problem konfrontiert und Ihre Antwort hat bei mir funktioniert ...
Reetu

1
Danke, ich habe in den letzten 3-4 Stunden um dieses Problem gekämpft
Sumit Kumar Saha

9

Unten Patch Arbeit für mich .. :)

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

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

Das Zurücksetzen auf NEIN hat das Problem gelöst!


2
Schritt 2: Mein Problem gelöst. Vielen Dank :)
Dorald

2

Nun, manchmal, wenn Sie 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. Sie müssen also sicherstellen, dass Sie Symbole, die Sie manuell hinzufügen, nicht wiederholen, solange sie bereits vorhanden sind in Proben enthalten


2

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

int const kView_LayoutCount = 3;

in meiner .h-Datei. Sechs Zeilen wie führten zu 636 Linker-Dateien, sobald gemeinsame Blöcke auf NO gesetzt wurden. (14k + wenn JA). Das Verschieben der Zeilen nach .m nach dem Entfernen von .h der Wertdeklaration und Kompilierung war ein Kinderspiel.

Hoffe das hilft anderen!


2

In meinem Fall war der Grund zu dumm:

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

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

Dies führte dazu, dass das Problem des Duplizierens von Symbolen für die Architektur arm64 und des Linker-Befehls mit dem Exit-Code 1 fehlschlug. Das Entfernen der const NSString-Zeile funktionierte für mich.


2

Überprüfen Sie Ihre Include-Datei. Ich hatte dieses Problem, weil ich versehentlich "Dateiname.m" anstelle von "Dateiname.h" importiert habe. Autokorrektur (Tab) hat ein "m" und nicht "h" eingefügt.


Vielen Dank, ich wusste nicht, dass ich diesen Fehler gemacht hatte und meine ganze Zeit in Anspruch nahm. Nochmals vielen Dank 👍
Supertecnoboff

1

Aus den Fehlern geht hervor, dass alle Klassen mehrmals angezeigt werden. Suchen und entfernen Sie die Klassen, die funktionieren.

Ich erstelle AppDelegate.h und .m Dateien, die mehrmals erstellt werden. Dieser Fehler tritt also auf. Endlich finden und entfernen Sie die Klassen, die für mich gut funktionieren.


1

Um dieses Problem zu lösen, gehen Sie zu Erstellungsphasen und suchen Sie nach doppelten Dateien wie (facebookSDK, entityads) und löschen Sie (Erweiterungsdatei.o). Erstellen Sie dann erneut.


0

Für mich habe ich eine Methode namens sampleMethodViewController_A erstellt und dieselbe Methode auch in ViewController_B. Es hat mir diesen Fehler verursacht, dann habe ich den Methodennamen in ViewController_B in geändert secondSampleMethod. Der Fehler wurde behoben.

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

Ich habe versucht, die No Common-Blöcke von Yes auf No zu ändern und dann die Testbarkeit von Yes auf No zu aktivieren. Es hat nicht funktioniert. Ich habe doppelte Dateien auch in Erstellungsphasen überprüft, aber es gibt keine doppelten Dateien.


0

Ich habe dieses Problem erhalten, weil ich eine Variable in meiner .m außerhalb einer Methode träge definiert habe, und dann in einer anderen .m-Datei eine andere Variable mit demselben Namen außerhalb einer Methode definiert habe. Dies verursachte ein doppeltes Problem mit dem globalen Variablennamen.


0

Das Problem für mich war, dass ich ein Framework manuell eingefügt hatte, aber dann auch dasselbe Framework in CocoaPods aufgenommen hatte, ohne zu wissen, dass ich dies tat. Sobald ich den einen oder anderen entfernt hatte, verschwand das Problem



0

Ich konnte diesen Fehler beheben, der lautete: "158 doppelte Symbole für Architektur armv7, 158 doppelte Symbole für Architektur arm64" --- Wenn dies auch der Fall ist, bedeutet dies, dass Sie versuchen, eine Datei zu kompilieren, die importiert oder importiert wird Erben eines Frameworks oder einer statischen Bibliothek mit Verweisen auf C ++ - Code oder Dateien. Eine einfache Möglichkeit, dies zu handhaben, besteht darin, die Erweiterung Ihrer .m-Datei in .mm zu ändern. So wird es gehandhabt, wenn Sie Objective C verwenden, obwohl Sie sich bei Swift nicht sicher sind.

Auch in Ihren Build-Einstellungen können Sie die "anderen Linker-Flags" auf -lc ​​++ aktualisieren


0

Wenn jemand dies mit Flutter experimentiert, versuchen Sie nicht, das Pod zu deintegrieren, pod init.

Wie ich es gelöst habe, ist Flatter Clean, Flatter Run -d [iOS-Gerät]

Hoffnung kann jemandem helfen.


0

PLZ Einstellung ändern.

Schritt 1: Gehen Sie zu ZIELE -> Build-Einstellungen -> Keine gemeinsamen Blöcke -> Nein

Schritt 2: Gehen Sie zu ZIELE -> Build-Einstellungen -> Testbarkeit aktivieren -> Nein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.