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?
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?
Antworten:
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?
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.
Für mich war es, dass ich versehentlich eine Datei als .m importiert habe, nicht als .h
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
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.
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 .
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. :) :)
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;
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!
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
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!
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.
Ü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.
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.
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.
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ä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.
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.
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
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