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:
Irgendwelche Ideen, wie man das behebt?
ios
objective-c
xcode
linker-errors
Picciano
quelle
quelle
Antworten:
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.
quelle
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?
quelle
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.
quelle
Für mich war es, dass ich versehentlich eine Datei als .m importiert habe, nicht als .h
quelle
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:
quelle
Eine andere Lösung ist:
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.
quelle
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 .
quelle
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:
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.
Die duplizierte Funktion / Klasse wird versehentlich an zwei verschiedenen Stellen / Dateien im Projekt definiert. Entfernen Sie die falsche Definition.
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. :) :)
quelle
Wenn Sie zu Xcode 7 oder 8 wechseln und ein wirklich altes Projekt öffnen, ist dieses Problem aufgetreten:
im
SomeConstFile.h
im
SomeConstFile.m
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
quelle
Unten Patch Arbeit für mich .. :)
Das Zurücksetzen auf NEIN hat das Problem gelöst!
quelle
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
quelle
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:
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!
quelle
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:
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.
quelle
Ü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.
quelle
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.
quelle
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.
quelle
Für mich habe ich eine Methode namens
sampleMethod
ViewController_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ändertsecondSampleMethod
. 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.
quelle
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.
quelle
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
quelle
Siehe Fehler beim Duplizieren von Symbolen beim Hinzufügen der NSManagedObject-Unterklasse, doppelter Link
quelle
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
quelle
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.
quelle
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
quelle