Build fehlgeschlagen mit: ld: doppeltes Symbol _OBJC_CLASS _ $ _ Algebra5FirstViewController

72

Ich erhalte plötzlich diesen Fehler, wenn ich meine App über den iPhone-Simulator ausführe:

clang: error: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen):

ld: doppeltes Symbol _OBJC_CLASS _ $ _ Algebra5FirstViewController in ... / Algebra5-anwcuftojtxtgkfootneeeqhwztj / Build / Intermediates / Algebra5.build / Debug-iphonesimulator / Algebra5.build / Objects-normal / i386 / ExercisVo Build / Intermediates / Algebra5.build / Debug-iphonesimulator / PSLE ​​Algebra5.build/Objects-normal/i386/PSLE_Algebra5FirstViewController.o für die Architektur i386

Worum geht es?

Joe Shamuraq
quelle

Antworten:

67

Es sieht so aus, als würde die Klasse Algebra5FirstViewController mehrmals kompiliert.

Können Sie sicherstellen, dass .m und .mm in Ihren Projektquellen in Xcode nur einmal enthalten sind? Sie können dies auch bestätigen, indem Sie im Kompilierungsprotokoll (letztes Symbol rechts neben dem Haltepunktsymbol) nachsehen, dass es nur einmal kompiliert wurde.

Wenn diese Klasse Teil einer Bibliothek ist, mit der Sie eine Verknüpfung herstellen, und Sie eine Klasse mit demselben Namen haben, kann derselbe Fehler auftreten.

Schließlich können Sie eine Bereinigung und Neuerstellung versuchen, falls die alten Objektdateien noch vorhanden sind und die kompilierten Dateien Junk enthalten. Nur für den Fall ...

BEARBEITEN

Ich stelle auch fest, dass der zweite Verweis in der Datei für ExercisesViewController enthalten ist. Vielleicht ist etwas in dieser Datei. Entweder haben Sie die Algebra5FirstViewController-Datei anstelle der .h-Datei importiert, oder der ExercisesViewController verfügt über @implementation (Algebra5FirstViewController) anstelle von @implementation (ExercisesViewController), oder es gab einen Junk mit dieser Datei, der mit einem Clean an Rebuild bereinigt wurde.

J_D
quelle
2
Autocomplete Importieren der .m-Datei anstelle der .h ist das, was das Problem für mich verursacht hat
Jeff Ames
51

Dies kann passieren, wenn dieselbe .m-Datei im Abschnitt "Quellen kompilieren" Ihres Ziels unter "Phasen erstellen" mehrmals referenziert wird. Entfernen Sie doppelte Einträge und es sollte Ihnen gut gehen.

Andreas Ley
quelle
2
... oder wenn eine .mim Code verwendete Datei NICHT in den "Compile Sources" referenziert wird - wie es meine Situation war.
Ryan Wheale
30

hatte auch dieses Problem durch Deklarieren von a const * NSStringin der Header-Datei (falsch) anstelle der Implementierungsdatei (korrekt)

toblerpwn
quelle
Dies war letztendlich mein Problem, war aber nur auf den Simulator beschränkt - es funktionierte gut beim Kompilieren / Ausführen auf meinem Telefon.
NathanChristie
24

Ich habe dieses Problem, weil ich versehentlich die .m anstelle der .h importiert habe. Ich hoffe, das Lesen erspart jemandem mit dem gleichen Problem einige Zeit.

user441669
quelle
10

Ich hatte das gleiche Problem. Habe es gelöst!

Wenn Sie Dateien in ein Projekt importiert haben, überprüfen Sie, ob die .m-Datei (Hauptdatei) unter Ziele (Projektname) -> Phasen erstellen -> Quellen kompilieren vorhanden ist.

Wenn die Datei nicht vorhanden ist, fügen Sie sie mit der angezeigten Schaltfläche (+) Hinzufügen hinzu. Wenn doppelte Dateien vorhanden sind (falls vorhanden), löschen Sie diese.

Drücken Sie nun cmd + shift + k, um das Projekt zu bereinigen. New Build sollte diesen Fehler nicht anzeigen.

Geben Sie hier die Bildbeschreibung ein

Jayprakash Dubey
quelle
5

Ich habe einen ähnlichen Fehler beim Hinzufügen von Dateien aus einem anderen Projekt erhalten, wie @paiego erklärt hat. Mein Fehler war, dass ich " Zu Zielen hinzufügen" nicht aktiviert habe . Wie oben erläutert, habe ich die Referenzen gelöscht und die Dateien erneut hinzugefügt, diesmal jedoch " Zu Zielen hinzufügen" aktiviert .

Eric
quelle
4

Ich habe einen ähnlichen Fehler erhalten und ihn auf diese Weise behoben .

Versuchen Sie, Build Active Architecture Only für das Pods-Projekt und das Ziel Ihrer App auf NO zu setzen

Zeeawan
quelle
3

In einem Fall habe ich diesen Fehler beim Ziehen einer neuen Klasse '.h und .m in das Projekt gesehen. Die einzige Lösung, die ich gefunden habe, war, die Verweise auf diese Dateien zu entfernen und sie dann über das Projektmenü wieder hinzuzufügen.

Paiego
quelle
3

Ich habe es beim Importieren eines ViewController.m in TableViewController getroffen. Versuchen Sie, '#import "ViewController.m"' zu löschen, wenn es beendet wird. Ich hoffe das hilft!

Huy Hóm Hỉnh
quelle
1

'Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen)' - Ich habe diesen Fehler beim Ausführen einer Phonegap-Anwendung auf dem iPhone erhalten. Ich habe Build Active Architecture Only in Yes geändert und es hat gut funktioniert.

user2218998
quelle
1

Es scheint, dass ich für m die Dateien in das Projekt gezogen habe und danach nicht mehr auf die Datei "Dateien zum Projekt hinzufügen" geklickt habe. Beides war der falsche Ansatz. Ziehen Sie es einfach in den Projektordner (im Finder), in dem sich die anderen .h- und .m-Dateien befinden.


quelle
1

sobald ich bekam

18 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1

Für mich lag das daran, dass ich "const NSInteger" in meinem Switch-Fall verwendet habe.

Ich habe die const NSInteger in enum geändert und die Referenz durch enum-Werte ersetzt.

Dies hat den Fehler für mich behoben.

Sahan Maldeniya
quelle
1

Dies geschieht entweder, einige Dateien fehlen im Abschnitt "Quellen kompilieren" oder es werden doppelte Einträge für einige Dateien gefunden. In meinem Fall hatte ich doppelte Einträge für zwei Dateien, ich löschte einen Eintrag für jede der Dateien, was mein Problem löste. Hoffe das hilft.

user2364956
quelle
1

Ich habe diesen Artikel gefunden , der eine Lösung für mich darstellt. Es bezieht sich auf Xcode 7, bei dem die Standardeinstellung für "Keine gemeinsamen Blöcke" in früheren Versionen "Ja" und nicht "Nein" ist.

Dies ist ein Zitat aus dem Artikel:

Das Problem scheint zu sein, dass der Abschnitt "Keine gemeinsamen Blöcke" im Abschnitt "Apple LLVM 6.1 - Codegenerierung" im Bereich "Build-Einstellungen" in der neuesten Version von Xcode auf "Ja" gesetzt ist.

Dies führte zu Zirkelverweisen, bei denen eine Klasse, die in meinen Kompilierungsquellen enthalten war, über einen #import in einer anderen Quelldatei (appDelegate.m) referenziert wurde. Dies führte zu doppelten Blöcken für Variablen, die in der ursprünglichen Basisklasse deklariert wurden.

Durch Ändern des Werts in "Nein" konnte meine App mein Problem sofort kompilieren und beheben.

Jazzmine
quelle
1

Ich poste eine neue Antwort darauf, weil ich auf diesen Fehler gestoßen bin und eine andere Lösung verwenden musste, die meiner Meinung nach spezifisch für iOS 9 ist.

Ich musste den Enable Bitcode in den Build-Einstellungen explizit deaktivieren, der im Update automatisch aktiviert wird.

Referenzierte Antwort: Neue Warnungen in iOS 9

mrshickadance
quelle
1

[XCODE 7.1 UPDATE]

Erste Option, die funktioniert hat:

Ich habe das Deployment Targetvon 7.1 auf 8.1 geändert und der Fehler ist verschwunden.

Hoffe das hilft jemandem.

UPDATE (Tag 2) : Zum zweiten Mal bin ich in 2 Tagen wieder hier.

An Tag 2 bekam ich zusätzlich zu diesem nervigen Fehler mehr Fehler. Das Problem war eine widersprüchliche Datei, die Xcode nicht erkannte. Ich habe die folgenden Links als Hilfe verwendet:

  1. "_OBJC_CLASS _ $ _ viewsampleViewController", referenziert von:

  2. 'ld: Warnung: Verzeichnis für Option nicht gefunden'

Und ultimativ:

  1. "_OBJC_CLASS _ $ _ viewsampleViewController", referenziert von:

Ich habe alles aus den FrameWork Search Paths+ Compile Resources+ Run Script Phases+ Pods gelöscht und sie dann erneut installiert, um letztendlich Erfolg zu haben.

Das Problem mit meiner Größe (an Tag 2) war eher ein Problem mit widersprüchlichen Dateien oder Dateien, die Xcode nicht erkannte.

Letztendlich half es jedoch, alles (oben und in den Links erwähnt) zu entfernen, häufig zu bereinigen und die Pods / Frameworks / Run-Skriptphasen neu zu installieren.

Hoffe wirklich, dass dies jemandem hilft.

Lukesivi
quelle
0

Durch Ausführen von Xcode 4.6.3 unter OSX 10.7.5 konnte dieser Fehler behoben werden, indem Architekturen von $ (NATIVE_ARCH_ACTUAL) in Native Architecture of Build Machine geändert wurden.

Justin Greenough
quelle
0

Ich habe dies einmal erhalten, indem ich (versehentlich) sowohl die .h- als auch die .m-Datei in dieselbe Klasse importiert habe.

sma
quelle
0

Ich habe diesen Fehler beim Implementieren einer Unterklasse ohne das erforderliche hinzugefügte Framework erhalten (MPMoviePlayerController ohne das MediaPlayer-Framework in diesem Beispiel).

DanWebster
quelle
0

Ich habe das gleiche Problem bei der Arbeit mit Bolts.framework. Es stellt sich heraus, dass bei einer Beschädigung von Bolts kein erneuter Import das Problem beheben kann. Ich musste zur ursprünglichen Download-Datei zurückkehren und sie komplett neu importieren. Dies hat es sofort behoben. Es war so ein seltsames Problem, dass ich ewig gebraucht habe, um es herauszufinden ... hoffentlich erspart dieser Tipp einigen von Ihnen die gleichen Frustrationen :)

Jul3ia
quelle
0

Dies trat bei mir auf, als ich eine UILabel-Referenz und ein int benannte. Ich bekam keinen Fehler, als ich es nur tippte, als ich versuchte, es auszuführen, sodass ich nicht realisierte, dass dies das Problem war, aber wenn Sie Haben Sie so etwas wie ein Label, das die "Punktzahl" ist, und Sie nennen es Punktzahl, und nennen Sie ein Int, das die Punktzahl ist, auch Punktzahl, dann tritt dieses Problem auf.

Yakov Shalunov
quelle
0

Abweichungen zu diesem Problem können auftreten, wenn eine Bibliothek oder Datei fehlt. Stellen Sie sicher, dass in Ihrem Projektexplorer keine Dateien fehlen: Sie werden rot geschrieben, wenn Xcode sie nicht findet.

SeanR
quelle
0

"Link Binary With Libraries" hatte eine alte Projektnamen-Pod-Bibliothek. Nach dem Entfernen behoben.

  1. Listenpunkt
  2. Projekt
  3. Phasen erstellen
  4. Binär mit Bibliotheken verknüpfen
  5. Veraltete Bibliothek entfernen.
Adi
quelle
0

Ich hatte das gleiche Problem mit einer Bibliothek und habe alle hier aufgeführten Antworten ausprobiert, und nichts hat geholfen.

Am Ende entfernte ich einfach die Bibliothek aus Link Binary With Libraries und fügte sie dann erneut hinzu, und es funktionierte einwandfrei.

Dan Leveille
quelle
0

Die einzige (und unfehlbare) Möglichkeit, dieses Problem zu beheben, besteht darin, einen Test über die Befehlszeile zu erstellen:

xcodebuild -workspace MyProject.xcworkspace/ -scheme MyScheme -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.3.1' test

An diesem Punkt wird Ihre Kompilierung sicherlich fehlschlagen, aber Sie werden alle Verknüpfungsprobleme sehen. In meinem Fall hatte ich mehrere Probleme wie:

  • ld: Framework 'Foo' nicht gefunden
    Um dies zu beheben, müssen Sie auf Ihrem Ziel BuildSettings-> Linking-> OtherLinkerFlags und das 'Foo'-Framework entfernen.
  • Verwendung des nicht aufgelösten Bezeichners 'ClassName' .
    Um dies zu beheben, muss ich auch die Zielmitgliedschaft der Datei zum UITest-Ziel hinzufügen / überprüfen.

Andere mögliche Probleme werden von xcodebuild aufgeworfen und können leicht behoben werden.

Luca Davanzo
quelle
0

Einfach CMD+ SHIFT+ putzen K, dann CMD+ bauen + Bhat bei mir funktioniert.

Drayfar
quelle
-1

In meinem Fall hatte ich einen Verweis auf eine Bibliothek in Other Linker Flags. Durch das Entfernen wurde der Fehler behoben.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

smileBot
quelle
-5

Ich hatte den gleichen Fehler. Ich hatte ein Audio-Frame-Werk importiert, das ich nicht mehr verwendete. Ich habe es entfernt (NICHT LÖSCHEN!) Und es wurde erfolgreich erstellt.

user1988806
quelle