Linker-Befehl fehlgeschlagen mit Exit-Code 1 (verwenden Sie -v, um den Aufruf anzuzeigen), Xcode 8, Swift 3


114

Ich kann diesen Fehler nicht loswerden!

Ich habe alle möglichen Dinge ausprobiert, z. B. Abgeleitete Daten löschen (Einstellungen-> Standorte-> Klicken Sie auf den grauen Pfeil, um den Ordner Abgeleitete Daten im Finder zu öffnen-> Rechtsklick, in den Papierkorb verschieben), das Projekt zu bereinigen (CMD + Umschalt + K oder Produkt) -> Bereinigen), Aktualisieren von Karthago und Abhängigkeiten, Überprüfen anderer Antworten auf StackOverflow (hauptsächlich Anpassungen in Build-Einstellungen / Phasen) und erneutes Klonen der App von Github usw.

Das gleiche Projekt funktioniert auf den Computern meiner Mitarbeiter.

EDIT: Von der aktuell am besten bewerteten Antwort konnte ich ein wenig weiter debuggen ... Ich bin mir immer noch nicht sicher, wie ich das beheben soll. Es sieht so aus, als hätte ich zweimal etwas im Projekt? Ich habe nachgesehen und kann nichts finden, das zweimal auftaucht!

Hier ist ein Bild des Protokolls:



Warum haben Sie die am besten bewertete Antwort akzeptiert, wenn sie Ihr Problem nicht gelöst hat ...?
Benomatis

Antworten:


160

Ich hatte heute das gleiche Problem in Xcode 8 Version 8.3.2

Rechtsklick auf Problem -> Im Protokoll anzeigen

Geben Sie hier die Bildbeschreibung ein

Dann können Sie überprüfen, was das Problem verursacht

Geben Sie hier die Bildbeschreibung ein


Dank dafür! Folgendes
Jake Dobson

Ich habe das endlich gelöst. Du hast geholfen, mich in die richtige Richtung zu führen! Es war wirklich scheiße, dass Xcode das Protokoll beim Klicken nicht enthüllte ... Hätte mir etwas Zeit sparen können!
Jake Dobson

Vielen Dank für den Tipp "Reveal in Log". Ich wusste nicht, dass ich es benutzen könnte
KarenAnne

1
@ GhasemTabatabaei Überprüfen Sie meine Antwort unten
Jake Dobson

80
Warum ist das die akzeptierte Antwort? Es beantwortet die Frage nicht wirklich, sondern hilft möglicherweise nur beim Erreichen der Lösung.
Tom Oakley

116

Vielleicht haben Sie eine Pod-Datei installiert und versuchen immer noch, aus der .xcodeprojDatei zu erstellen, anstatt.xcworkspace


4
Nein, ich habe Karthago aus diesem Grund benutzt. Das ist jedoch eine legitime Antwort, die anderen Menschen mit demselben Fehler helfen könnte!
Jake Dobson

1
Ich habe einem vorhandenen Projekt m $ AppCenter-Code hinzugefügt und es wurden Pods benötigt. Keine Ahnung, was los war und hatte es seit .xcodeprojüber einem Jahr mit dem gemacht. Etwas so Einfaches!
Dennis Smolek

1
Mein Fix war etwas damit verbunden. Ich hatte kürzlich einige Abhängigkeiten aktualisiert und das Projekt verwendete jetzt CocoaPods. Bisher habe ich immer aus der Projektdatei gearbeitet. Ich habe die Arbeitsbereichsdatei geöffnet, in der sich sowohl mein Projekt als auch die Pods befanden, und alles hat einwandfrei funktioniert.
Rozgonyi

39

Das einzige, was für mich funktionierte, war zu rennen pod deintegrateundpod install


Die Frage wurde beantwortet. Wenn Sie meinen Kommentar unten sehen, habe ich eine Datei importiert, die bereits in diese Datei importiert wurde. Das Projekt befand sich in einem Rennzustand und versuchte zweimal, auf die Datei zu verweisen.
Jake Dobson

ok yeah es hat aber nicht für mich funktioniert und als ich es gegoogelt habe, ist es das, was aufgetaucht ist, also dachte ich, ich würde versuchen, jemand anderem zu helfen ... ich bin neu in diesem Bereich, sollte ich meine Antwort löschen?
Charles Harring

Ich denke nicht, da es schon da ist. Ich bin sicher, jemand könnte es nützlich finden. Die App, die ich benutzte, verwendete keine Cocoapods. Die Sache ist, dieser Fehler ist sehr häufig und gibt wenig Informationen über sich. Je nach Projekt können so viele Lösungen gefunden werden.
Jake Dobson

19

hast du es sauber gemacht cmd + shift + k


8
Oh ja ... oft!
Jake Dobson

Das ist buchstäblich alles, was ich bekomme ... Wenn ich auf den Text klicke, erhalte ich keine zusätzlichen Informationen oder den Speicherort der Datei, an der es passiert ist, wie es bei den meisten Fehlern der Fall ist. Nichts in der Konsole, die App wird aufgrund dieses Fehlers nie ausgeführt.
Jake Dobson

FWIW, ich bin kürzlich auf dieses Problem gestoßen, als ich mit einem SDK erstellt habe, und der Vorschlag von @ FranciscoPerez hat es geschafft. Empfehlen Sie es auf jeden Fall als ersten Schritt, bevor Sie zu tief in das Debuggen einsteigen.
Riastrad

9

Okay ... Also hier ist, was mein Problem gelöst hat ...

in der App-Delegatendatei:

#import "AppDelegate.h"
#import "DarkSkyAPI.h"
//#import "Credentials.h"

Ich hatte Credentials.h bereits in die DarkSkyAPI.m-Datei in meinem Projekt importiert. Durch das Auskommentieren des zusätzlichen Imports wurde der Fehler behoben!

Einige Dinge zu erwähnen und vielleicht jemandem in der Zukunft zu helfen. Die Antwort von @ umairqureshi_6 hat mir dabei geholfen, sie aber nicht gelöst. Er führte dorthin, wo ich die Informationen ausgraben konnte. AppDelegate- und DarkSkyAPI-Dateien wurden immer wieder im Fehlerprotokoll angezeigt, und die Informationen, die aus der Anmeldeinformationsdatei abgerufen wurden, verursachten den Fehler. Ich wusste, dass es in einer dieser 3 Dateien sein musste, also überprüfte ich sofort die Importe, weil ich mich daran erinnerte, dass die .h alle Importe aus ihrer .m-Datei enthält. Boom!


6

Jetzt wurde die Frage bereits beantwortet. Aber wenn dies jemandem hilft, Zeit zu sparen: Ich hatte den gleichen Fehler. Ich überprüfte alles, um einen sehr kleinen und dummen Fehler von meiner Seite zu finden. Ich habe eine benutzerdefinierte ManagedObject-Datei mit Kerndaten in einen Ansichtscontroller meines Projekts importiert. Ich habe versehentlich die .m-Datei anstelle der .h importiert Datei das doppelte Symbol im Architekturfehler verursacht hat (Linker-Befehl fehlgeschlagen), weil meine .m-Datei der Eigenschaftsklasse die .h-Datei der Kerndatenklasse importiert und somit einen doppelten Import verursacht.

Überprüfen Sie einfach, ob Sie die richtigen Dateien importiert haben, bevor Sie mehrere Lösungen ausprobieren.!


Ja! Dies war meinem Problem sehr ähnlich. Ich habe dieselbe Datei zweimal in mein Projekt importieren lassen. Vielmehr habe ich eine "fileA.h" in "fileB.h" importiert, dann aber "fileA.h" und "fileB.h" in "fileC.h" importiert, oder so ähnlich ... Also stürzt die App ab weil es nicht weiß, welche es verwenden soll. Auf jeden Fall ein guter Ort, um andere daran zu erinnern, ihre Dateiimporte noch einmal zu überprüfen!
Jake Dobson

6

Viele Lösungen sind oben erwähnt. Niemand hat für mich gearbeitet (aber bitte versuchen Sie es zuerst oben).

Wählen Sie Projekt -> Ziel auswählen -> Verknüpftes Framework und Bibliotheken -> Alle Pod-Bibliotheken hinzufügen. (entfernen, wenn sie in eingebetteten Binärdateien vorhanden sind)

Entfernen Sie diese nun aus dem Framework-Ordner im linken Datei-Explorer von xcode.

Dies löste mein Problem.


4

Wählen Sie das Projekt-> Erstellungsphase-> Binär mit Bibliotheken verknüpfen und fügen Sie alle Pod-Bibliotheken hinzu.


3

Ich hatte das gleiche Problem mit Karthago für Abhängigkeiten.

Gehen Sie einfach zu Projekt auswählen -> Einstellungen erstellen -> Nach Bitcode aktivieren suchen -> Wenn Ja ausgewählt ist, wählen Sie Nein.

Das hat dieses Problem für mich gelöst.


2

Ich hatte das gleiche Problem.

Die Ursache war, dass ich dieselbe globale Variable in 2 Dateien deklariert habe . Es wurde also der gleiche Fehler angezeigt, bei dem 2 doppelte Symbole angezeigt wurden .

Die Lösung bestand darin, diese Variablen zu entfernen.


1
Warum haben Sie beide und nicht nur einen entfernt?
Jake Dobson

2

Für alle, die dieses Problem mit dem Flurry-Framework haben. Dies hat mein Problem behoben. Für mich war das Problem, dass ich die folgenden Dateien importiert, aber nie verwendet hatte. libFlurryTVOS_9.2.3 libFlurryWatch_9.2.3

Alles, was ich tun musste, war, zu den Projektzieleinstellungen zu gehen und diese beiden Dateien aus dem Abschnitt "Verknüpftes Framework und Bibliotheken" zu entfernen, und das Problem wurde behoben.


2

In meinem Fall ist der Grund für den Fehler eine Bibliothek, die zweimal verknüpft wurde.

Ich benutze es react-nativealso wurde es automatisch mit react-native linkund manuell in xcode verlinkt.


2

Stellen Sie sicher, dass Find Implicit Dependencies Kontrollkästchen aktiviert ist.

(Produkt -> Schema -> Schema bearbeiten -> Erstellen -> Implizite Abhängigkeiten suchen)


2

Ich habe das Sparkle-Framework mit CocoaPods getestet.

Leider habe ich gesagt pod 'Sparkle', '~> 1.21' die PodFile an der falschen Stelle abgelegt. Ich habe es unter Testen gestellt (für Unit-Tests).

Einmal an der richtigen Stelle in PodFile platziert, ist alles in Ordnung.


1

Ich musste es einfach tun import Foundation !

Ich habe Kitura für die Swift-Serverseite verwendet und dies immer wieder vergessen!


Ha. Ja, Sie müssen immer mindestens Foundation importieren, bevor Sie etwas tun können! Normalerweise importiere ich UIKit anstelle von Foundation, da ich fast immer die Funktionen von UIKit verwenden muss und UIKit alles von Foundation für Sie geerbt hat. Importe mit Objc können ziemlich schwierig sein, aber es sieht so aus, als hätten Sie Swift verwendet?
Jake Dobson

Ja, ich habe Swift verwendet. In der vorliegenden Datei wurden keine Compilerprobleme angezeigt, aber nur beim Ausführen der Datei bin ich auf dieses Problem gestoßen!
Honig

1
Ja, ich glaube nicht, dass es bis zur Laufzeit wirklich danach sucht, ich könnte mich irren. Aber es scheint, als hätte es kein Problem, bis Sie versucht haben, auf etwas von Foundation zuzugreifen, den Import nicht gefunden haben und dann den Prozess nicht fortsetzen konnten - Absturz!
Jake Dobson

1

Hier ist mein Problem und meine Lösung:

Ich habe zwei Dateien mithilfe des Quellbaums (Versionscontroller) aus dem Quellcode entfernt. Nach dem Anwenden des Diff, das die beiden von mir entfernten Klassen enthält, hat Xcode es nicht automatisch hinzugefügt. Also habe ich einen Linkerfehler bekommen.

Ich habe die Dateien manuell hinzugefügt, indem ich mit der rechten Maustaste auf den Gruppennamen geklickt und "Dateien hinzufügen zu" ausgewählt habe. Jetzt wurde mein Fehler behoben.

Wenn jemand auf den Linker-Fehler bezüglich der Klassendatei gestoßen ist, versuchen Sie, ihn manuell hinzuzufügen.


1
Es scheint definitiv ein Dateiproblem zu sein, auf das sie hinweisen wollen ... Dateien an anderer Stelle rufen keine Informationen voneinander ab. Dies scheint auf dieser Seite häufig zu finden zu sein. Danke für deine Antwort. Ich hoffe, es hilft jemandem auf der Straße!
Jake Dobson

1

Hatte dieses Problem nicht, als ich auf meinem eigenen Gerät baute und lief. Hatte nur dieses Problem mit Simulatoren. Ich habe meinen Computer einfach neu gestartet und ausgeführt. Es funktionierte.


1

In meinem Fall habe ich den TargetNamen in meinem geändert. PodfileEs wird also der gleiche Fehler für mich erstellt.

Lösung

Gehen project-> Build Phase->Link Binary with librariesSie einfach Entfernen Sie die alte FrameWorksdurch Klicken auf minus button(-)Und reinigen und erneut ausführen. Es ist meine Arbeit.

Geben Sie hier die Bildbeschreibung ein

Unerwünscht entfernen .framework.


1

Die anderen Antworten haben bei mir nicht funktioniert, daher teile ich hier meine Lösung für den Fall, dass sie jemand anderem helfen könnte:

Mein Problem war, dass ich das Podfile meines XCode-Projekts für die falsche Plattform konfiguriert habe. Das Ändern von "platform: ios" am Anfang meiner Poddatei in "platform: macos" hat für mich funktioniert, um den Fehler zu beseitigen.


0

Ich hatte das gleiche Problem. Wenn Sie ein Github-Projekt auschecken, verwenden Sie anstelle des Git-Klons den Git-LFS-Klon, da einige große Dateien manchmal nicht ordnungsgemäß nur mit Git geklont werden. Stellen Sie außerdem sicher, dass Ihr Bitcode deaktiviert ist.


guter Hinweis ... aber normalerweise teilt Ihnen die Konsole mit, dass einige Dateien zu groß sind, um übertragen zu werden?
Jake Dobson

0

In der Gem-Lock-Datei wurde für mich eine ältere Version von Cocoapods angegeben als die, die ich installiert hatte. Ich musste mich neu verzweigen und bundle exec pod installstattdessen rennenpod install


0

Es scheint, dass das Problem für die meisten von uns anders ist und die Fehlermeldung anständige Informationen enthält. In meinem Fall wurde das Bereitstellungsziel 10.13von der export MACOSX_DEPLOYMENT_TARGET=10.13Leitung festgelegt, aber ich wurde ausgeführt 10.14. Daher musste ich mein Bereitstellungsziel auf 10.14Allgemein> Bereitstellungsinformationen ändern, damit die ITLibrary-bezogenen Symbole wieder verfügbar waren.

cd /Users/foo/src/scrobble/macos/itunes-scrobble
    export MACOSX_DEPLOYMENT_TARGET=10.13

... SNIP ...

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_ITLibMediaItem", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibPlaylist", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_ITLibrary", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

0

In meinem Fall habe ich mehrere Produkte aus demselben Projekt hergestellt. Für eines der Produkte ist diemain.m importierte Datei eine Header-Datei aus einem anderen Ordner unter demselben Projekt. Diese Datei war jedoch nicht in "Erfüllte Quellen" unter "Erstellungsphase" enthalten. Dies verursachte einen Linkerfehler.

Nachdem ich die Einstellungen für "Build-Phasen" für ein Produkt, das erfolgreich erstellt werden konnte, sorgfältig verglichen hatte, wurde mir klar, dass die .mDatei des Headers in die Liste der "kompilierten Quelle" aufgenommen werden muss. Mein Problem wurde nach dem Hinzufügen dieser Datei behoben. Ein Bild zur Klarheit anhängen. Die markierte Datei musste hinzugefügt werden.

Geben Sie hier die Bildbeschreibung ein


-1

Ich habe die gleichen Probleme beim Erstellen eines Ionic 1-Projekts.

Ich konnte das Problem beheben, nachdem ich die Datei CDVLogger.h & CDVLogger.m gelöscht hatte


Anscheinend haben Sie diese Dateien überhaupt nicht gebraucht? Muss auch Dateien in diesen und anderen Dateien aufgerufen haben, das Projekt verwirrt und dessen Ausführung verhindert haben.
Jake Dobson

-4

Ok, ich hatte gerade heute das gleiche Problem und fing an zu googeln, als ich auf diesen Thread stieß. Ich habe die Frage noch nicht vollständig gelesen, als mir die Antwort in den Sinn kam: Ich habe eine Klasse mit einem leeren Konstruktor deklariert

class MyClass{
    MyClass();

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Dann dachte ich mir, warum ich den Konstruktor meiner Klasse nicht mit geschweiften Klammern ( {}) beenden sollte (nicht sicher, ob ich mit der Wortauswahl hier richtig bin, aber wen interessiert das? ). So tat ich:

class MyClass{
    MyClass(){}

    void func_one(){
    // code
    }

    void func_two(){
    // code
    }

    ~MyClass(){
        cout << "Deleting object" << endl;
     }
};

Das Problem wurde behoben, mein Code funktionierte einwandfrei.

Ich weiß, die gute Praxis besteht darin, das Problem zu untersuchen und die wahre Ursache zu finden, aber das hat bei mir funktioniert.


Ich denke nicht, dass dies für diesen Thread hilfreich ist ... Es scheint, als würde der Fehler versuchen, ein Dateiproblem zu beheben, beispielsweise das Importieren derselben Sache in separate Dateien. Ich finde es seltsam, dass Sie diesen Fehler erhalten würden, da dies ein Objective-C-spezifischer Fehler ist ...
Jake Dobson

Ich habe diesen Fehler auch in C ++ bekommen. Der Linker-Fehler in Ihrem Fall war wahrscheinlich, dass der Linker den Code für Ihren Konstruktor nicht finden konnte. Ich hatte einen ähnlichen Fehler mit einer Funktion, die ich umbenannt habe, aber da Xcode 10 das Linker-Protokoll nicht selbst öffnen konnte und ich nicht wusste, dass Sie mit der rechten Maustaste klicken und "im Protokoll anzeigen" können, war ich für einige verblüfft Minuten, um den Fehler zu lokalisieren.
Matt Parkins
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.