Apple Mach-O Linker Fehler beim Kompilieren für das Gerät

238

Ich habe gerade ein Upgrade auf xcode 4.0 durchgeführt und kann es nicht mehr auf dem iPhone bereitstellen. Ich erhalte einen Apple Mach-O Linker-Fehler, der jedoch für den Simulator weiterhin funktioniert.

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1
CodeVomit
quelle
37
Was zum Teufel?! So viele verschiedene Probleme für die gleiche Fehlermeldung. Gute Arbeit Apple!
Iulian Onofrei
17
"FEHLER: Ein Fehler ist aufgetreten" wäre hilfreicher :))
Aviram Netanel
Schauen Sie sich die Warnungen an, die der Linker vor dem Fehler ausspuckt. Dies kann zu einer besseren / spezifischeren Lösung führen.
Pro Q

Antworten:

216

Hier ist eine dauerhafte Lösung. Das generelle Überschreiben eines Projekts kann zu diesen Problemen führen. Versuchen Sie diese Methode.

-UPDATE - Clang-Fehler - Mach-O-Linker-Fehler

In einigen Fällen wird ein Fehlerprotokollfenster angezeigt, in dem der Fehler .xctest angezeigt wird, um ihn zu beheben

-> Wählen Sie Ihr Projekt aus

-> Wählen Sie daneben (kurz vor der Registerkarte Allgemein) Ihre projectTest-Datei aus der Dropdown-Liste aus

-> Es gibt eine Option (wie ProjNameTests)

-> Wählen Sie in der Host-Anwendung Ihr Projekt nur dann aus der Dropdown-Liste aus, wenn es benutzerdefiniert angezeigt wird

GETAN!

Geben Sie hier die Bildbeschreibung ein

Alte Methode gelöscht

Gajendra K Chauhan
quelle
4
Wenn ich den Framework-Suchpfad entferne, kann ich keine Header-Datei finden
Danpe
62
Ich glaube, ich verstehe es nicht. Was soll ich machen…?
Fabian
1
@fabian Überspringen Sie einfach und versuchen Sie eine alternative Lösung :-)
Gajendra K Chauhan
4
Rettete meinen Tag Mann. Wenn ich vor meinem Chef sitze, muss ich ihm die App zeigen, an der ich arbeite, und ich habe diesen Linker-Fehler erhalten. Ich war weg, wenn ich nicht hier gelandet bin: D
Saraz
2
Wo befindet sich die Host-Anwendung im letzten Schritt?
Kartiikeya
195

Ich hatte das gleiche Problem und das Problem war, dass ich versehentlich eine .m-Datei anstelle von .h in eine Implementierungsdatei importiert habe - hoffe, es hilft

Daniel
quelle
1
Fehler nicht zu finden!
Probieren Sie
Dies ist nicht wahr, ich habe dasselbe in einem neuen Projekt versucht und immer noch den gleichen Fehler erhalten.
Hemang
Gehen Sie zum Abschnitt Projekteinstellungen und Erstellungsphasen und stellen Sie sicher, dass Sie keine .m-Datei im Abschnitt "Bundle-Ressourcen kopieren" anstelle von "Quellen kompilieren" haben. das hat bei mir
funktioniert
Es ist unmöglich, die Lösung zu finden. Ich weiß nicht, was ich tun werde ...
Markus
Du hast mein Leben gerettet. Ich danke dir sehr!
Isaac
73

Bin gerade auf das gleiche Problem gestoßen.

Die Lösung (für mich) = Überprüfen Sie Ihre Frameworks.

In meinem Fall hatte ich Klassen im Zusammenhang mit CoreData ohne "CoreData.framework" hinzugefügt. Das Hinzufügen löste die MACH_O-Beschwerde.

Dante Cesa
quelle
6
Dies passiert auch, wenn Sie eine Bibliothek erneut verknüpft haben, die in der neuesten SDK-Version nicht vorhanden ist. Angenommen, Sie haben einen Link gegen libz.1.2.3 erstellt und das SDK enthält 1.2.5. Überprüfen Sie Ihre Frameworks ist ein wirklich guter Vorschlag! Danke Dante!
SlowTree
Vielen Dank, SlowTree. Der Vorschlag zum Speichern löste meine Erfahrung mit diesem Linker-Absturz. libz.1.2.3 bis libz.1.2.5;
Tom Pace
2
Cocoapods hat libPods.afür mich zwei Dateien verknüpft (daher die doppelten Symbole). Danke, Dante!
Nick Merrill
Ja. .A-Dateien entfernt und erneut vom Linker hinzugefügt. Es hat funktioniert!
Balasubramanian
61

Öffnen Sie die .xcworkspace-Datei, nicht .xcodeproj. Ich wiederhole die geöffnete .xcworkspace-Datei. Alle Ihre Fehler werden verschwinden.

Mahi
quelle
1
Wow, das muss eine der verrücktesten Debug-Meldungen sein. Ich hätte buchstäblich nie gedacht, dass dies der Grund für die übermittelte Nachricht war.
Joseph Casey
1
Hat den Trick für mich gemacht, weil es eine externe Bibliothek gab, die nicht in .xcodeproj enthalten war. hatte mit Cocoapods zu tun
Sjoerd de Wit
Das hat bei mir funktioniert. Wie @SjoerddeWit sagte - das Einschließen von Cocoapods erfordert das Öffnen von .xcworkspace anstelle von .xcodeproj.
Cody Richmond
Rettete meinen Tag! +1
Bruno Monteiro
Ich habe ein Unity-Projekt nach xcode exportiert und es gibt keine .xcworkspace-Datei
Ayush Malviya
36

Betreff: Problem wie im Titel beschrieben:

Nur für den Fall, dass jemand anderes das Offensichtliche verpasst hat ...

Ich bin auf diesen Fehler gestoßen, nachdem ich eine neue Version von Xcode4 installiert und vorhandene Dateien in ein neues Projekt gezogen habe. Ich konnte nicht erkennen, dass das Kontrollkästchen "Zu Zielen hinzufügen" im Dialogfeld "Optionen zum Hinzufügen von Dateien auswählen:" deaktiviert war. Das Problem wurde behoben, indem ich meine Auslassung unter Ziele> Phasen erstellen> Quellen kompilieren korrigierte.

cate
quelle
Dieser Trick hat bei mir funktioniert. Vielen Dank. Ich habe alle Kompilierungsverzeichnisse gelöscht und das Projekt neu erstellt.
Vivek Gyaneshwar
34

Menü> Produkt> Reinigen, das hat es funktioniert. Bei allen anderen bin ich mir nicht sicher. Ich habe ein Bild hinzugefügt, um es zu zeigen.

Geben Sie hier die Bildbeschreibung ein

dnaatwork.com
quelle
1
Genial. Mit Abstand die einfachste Lösung, die ich finden konnte.
Vincent van Leeuwen
29

Bizarrer Fehler. Für mich habe ich gerade Xcode gereinigt und neu gestartet und das Problem ist verschwunden.

p.pad
quelle
26

Fix: Build-Einstellungen> Bitcode aktivieren> Nein Geben Sie hier die Bildbeschreibung ein

Sebastián Lara
quelle
Heiliger Schuss ..! Das hat bei mir funktioniert :)
Droid Genie
24

Keine dieser Antworten hat mir geholfen. Dann habe ich versucht, Cocoapods neu zu installieren:

pod deintegrate

pod install

Problem gelöst!

Johannes
quelle
Ich bin mir nicht sicher, wo die Trennung mit pods & xcode liegt, aber oft ist es schwierig sicherzustellen, dass Pods-Dateien in den Ordner derivatedData gelangen. Dies scheint das Problem zu beheben. Ich wünschte, ich könnte nur diese Antwort beginnen ..
Jacksonkr
20

Das Problem war, dass in XCode 4 die Abhängigkeiten nicht die Architektureinstellungen des Hauptprojekts übernehmen, wie dies zuvor in XCode 3 der Fall war. Ich musste alle meine Abhängigkeiten durchgehen, um sie für die richtige Architektur festzulegen.

CodeVomit
quelle
2
Danke! Ich wurde durch die Tatsache irregeführt, dass sich die Fehlermeldung des Linkers über "Datei nicht gefunden" und nicht über "Datei gefunden, aber ich kann sie nicht verwenden ..." beschwert und durch die Xcode-Einstellungen nach Bibliothekssuche suchte Wege. Aber das hat bei mir funktioniert. Und wenn Sie dieses Problem haben, ist dieser andere Beitrag ebenfalls verwandt: stackoverflow.com/questions/2999844/three20-and-ios-4 . Auch dieser schöne zusammenfassende Blog: amirnaor.com/?p=112
Rob
13

Ich hatte das gleiche und schaffte es, es zu lösen.

In Xcode Vorlieben, Standort Registerkarte Änderungswert unter Build - Standort zu " Place build products in locations specified by targets".

Wolfert
quelle
Danke Wolfert, habe das versucht, habe aber immer noch 1250 Apple Mach-O Linker Warnungen und keine Fortschritte. Haben Sie noch etwas getan, um dies zu beheben? Cheers
Danke Wolfert! Du hast mir viel Zeit gespart.
Sunil Targe
6
Option ist in XCode 5.1
Hemang
13

Ich hatte eine Weile damit zu kämpfen, und in meinem Fall war es die Build-Einstellung unter Suchpfaden mit dem Namen FRAMEWORK_SEARCH_PATHS. Es half, dass ich die Schaltfläche "Ebenen" auswählte, die meine Einstellungen für Projekt, Ziel und "Gelöst" zu vergleichen schien. Ich habe gesehen, dass meine Zieleinstellung den Standardwert von "$ (geerbt)" irgendwie überschrieben hat, und der überschriebene Wert war, wie XCode die Einstellung "aufgelöst" hat. Als ich die Überschreibung entfernte, die in diesem Fall das 3.2-SDK spezifizierte, verschwanden die Linker-Fehler - ebenso wie einige kürzlich erschienene Warnungen vor Klassen, in denen ich Post-4.0-Methoden aufgerufen habe.

Zu diesen Warnungen - Ich habe sie noch nie gesehen, bevor ich das MessageUI-Framework für eine kürzlich vorgenommene Änderung hinzugefügt habe. Ich vermute, aber ich weiß nicht genau, dass XCode beim Hinzufügen dieses Frameworks versucht hat, etwas Kluges zu tun, indem es diese Überschreibung meinem Ziel hinzugefügt hat. Ich habe es zu keinem Zeitpunkt explizit gemacht. Die Warnungen betrafen beispielsweise die URLByAppendingPathComponent-Methode von NSURL, die erst in SDK 4.0 angezeigt wurde. Vor dem Hinzufügen des MessageUI-Frameworks habe ich diese Warnung nie erhalten. Und da ich die Außerkraftsetzung entfernt habe, bekomme ich sie nicht mehr.

tigerswim19
quelle
11

Ich hatte dieses Problem und durch Importieren wurde es QuartzCorebehoben.

jmosesman
quelle
8

Das Ändern von "Nur aktive Architekturen erstellen" in "Ja" in "CordovaLib.xcodeproj ->" Build-Einstellungen "hat mir geholfen. Früher lief die App auf dem Simulator, aber nicht auf dem Gerät.

Nishanth Nair
quelle
7

Möglicherweise müssen Sie Ihre Build-Einstellungen aktualisieren.

Überprüfen Sie die iOS-Zielversion und die Prozessorarchitekturen, da Sie möglicherweise nicht über die alten SDKs mit XCode 4 verfügen.

Möglicherweise wird in den Build-Einstellungen «Missing SDK» angezeigt. Ändern Sie das auf das, was gilt.

Macmade
quelle
Das ist so ziemlich das erste, was ich mache, wenn ich xcode aktualisiere. Diesmal ist es nicht das Problem.
CodeVomit
7

Ich hatte das gleiche Problem: Ich habe gerade versehentlich eine .m-Datei gelöscht, während .h im Projekt war. Das Problem ist verschwunden, als ich die .m-Datei wiederhergestellt habe.

Mischa Karpenko
quelle
6

Stellen Sie sicher, dass kein bestimmter Framework-Suchpfad angegeben ist. Wenn Sie zu den Informationen auf dem Ziel gehen und nur die Einträge für den Framework-Suchpfad entfernen, sollten die Standardeinstellungen für Ihre angegebene Bereitstellungsversion verwendet werden.

Grady-Spieler
quelle
5

Ich versuche nur eine category classDatei zu erstellen und habe dieses seltsame Problem ... und schließlich ...

Falscher Weg zum Erstellen einer Kategorieklasse, die das Problem verursacht:

New File-> Cocoa Touch-> Objective-C class, dann habe ich den Namen der Dateien in Kategorie Klasse wie Name geändert .. (dh OriginalClass_CategoryName.h/mzu OriginalClass+CategoryName.h/m, und auch den Inhalt in der Datei geändert).

Richtiger Weg hierher:

New File-> Cocoa Touch-> Objective-C categoryund es werden automatisch Dateien generiert ( OriginalClass+CategoryName.h/m).

Oh, wie dumm ich bin !!

Kjuly
quelle
5

Wenn Sie CoreData verwenden und XCode zum Generieren von NSManagedObject-Unterklassen für Ihre Entitäten verwenden, stellen Sie sicher, dass Sie nur eine für jede Entität generieren.

Mein Problem war, dass mehrere NSManagedObject-Unterklassen für dieselbe Entität generiert wurden (und in verschiedenen Ordnern abgelegt wurden).

Ich habe gerade alle gelöscht und die NSManagedObject-Unterklassen neu generiert.

Flaviu
quelle
5

Um der Liste der seltsamen Dinge hinzuzufügen, die dieses Problem behoben haben ...

Ich hatte einige const CGFloat-Variablen in einer globalen Header-Datei wie diese

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

In dem Moment, als ich diese entfernte, war alles in Ordnung :)

Sherlock
quelle
1
Mein WEIRD-Problem befand sich in der Datei .pch oder constants.h. Ich habe eine Konstante als NSString deklariert. * Const kInitiaNotification = @ "kInitialNotification"; ohne zuerst die "statische" zu erwähnen
Mazen Kasser
Ich hatte das Problem kurz nachdem ich von NSString static *key = @"someKey"zuconst NSString *key = @"someKey"
TonyTony
5

Ich hatte genau das gleiche Problem, nur weil ich zwei gleiche Konstanten in verschiedenen Klassen hatte. Dieses Problem kann auch auftreten, wenn Sie eine .m-Datei und keine .h-Datei importieren

Adela Toderici
quelle
Du rettest meinen Tag !!
teck wei
@teckwei können Sie den Aufwärtspfeil drücken: D
Adela Toderici
4

Ich hatte das gleiche Problem und habe es gelöst. In meinem Fall hat die Einstellung "Architekturen" das Problem verursacht. In meiner Projektdatei auf der Registerkarte Build-Einstellungen wurden Architekturen auf armv6 festgelegt. Ich habe es in Standard (armv7) geändert, mache sauber und baue. Dann hat es geklappt!

Kim Jin
quelle
4

In meinem Fall bestand das Problem darin, dass unterschiedliche Architekturen unter verschiedenen Zielen angegeben wurden. Ich habe mein Anwendungsziel mit armv6, armv7 und cocos2d mit Standard (amrv7) erstellt. Gehen Sie in die Build-Einstellungen und stellen Sie sicher, dass Ihre Architekturen für alle Ziele übereinstimmen.

ChrisP
quelle
4

Ich habe dieses Problem zu komisch gelöst!

Gehen Sie zu Ziel > Phasen erstellen > Binär mit Bibliotheken verknüpfen :

Entfernen Sie alle Ihre Frameworks und fügen Sie sie erneut hinzu!

Hoffe es funktioniert bei dir!

Rudi
quelle
ziemlich schreckliche Lösung
SleepsOnNewspapers
Es kann nicht beantwortet werden ... nicht sehr logisch
LKM
Ich habe die Fehlermeldung überprüft und festgestellt, dass es sich um eines der Frameworks handelt. Deshalb habe ich dieses Framework entfernt und erneut hinzugefügt, nicht alle Frameworks, sondern nur dieses.
Oluwatobi Omotayo
4

Für schnelle Sprache ...

Ich erhalte die Fehlermeldung "ld: Datei zu klein (Länge = 0) ...."

In meinem Fall bereinige ich einfach das Projekt und baue es dann neu auf.

Schritte:-

1) gehe zu Projekt -> Reinigen

2) gehe zu Projekt -> Erstellen

Hoffe das hilft..

Niks
quelle
Hat für mich gearbeitet. Passiert, als ich das Gerät von iPhone 6 auf iPhone 4S umstellte.
racl101
Hat auch für mich gearbeitet. Vielen Dank
Lee
4

Das hat mir einen Trick getan:

Gehe zu

1) Produkte> sauber

2) Windows> Projekte

3) Wählen Sie Ihr Projekt aus und klicken Sie auf " Löschen " abgeleitete Daten

4) Produkte> Erstellen

user4886069
quelle
3

Eine Möglichkeit: Aktivieren Sie "Dead Code Stripping" in den Xcode 4 Build-Einstellungen.

Eine andere Möglichkeit: Möglicherweise haben Sie für ein Framework, das zuvor GCC verwendet hat, auf LLVM umgestellt. Wenn Sie zu GCC (oder LLVM GCC) zurückkehren, werden diese Warnungen möglicherweise entfernt.

Enchilada
quelle
3

Ich habe fälschlicherweise eine neue Konstante mit demselben Namen wie eine vorhandene Konstante in einer anderen Datei definiert und diesen Fehler bei der Verwendung von xCode 4.3.1 verursacht. xCode hat sich nicht beschwert, aber der Compiler mag es nicht.

Moliveira
quelle
3

Ich konnte diesen Fehler beheben, indem ich "Bibliothekssuchpfade" bearbeitete.

Es tauchte an erster Stelle auf, weil ich ein paar Ordner verschoben hatte, und das führte dazu, dass meine Build-Einstellungen zwei verschiedene Suchpfade hatten, da sie automatisch zu Ihren Build-Einstellungen hinzugefügt werden, wenn Sie eine Bibliothek / ein Framework verknüpfen, dies jedoch nicht immer entfernt.

Wenn Sie also eine verknüpfte Bibliothek / ein verknüpftes Framework in ein anderes Verzeichnis verschieben und erneut verknüpfen, müssen Sie den Suchpfad manuell bearbeiten.

Sie können dem möglicherweise ausweichen, indem Sie die Bibliothek / das Framework entfernen, bevor Sie es verschieben, aber das habe ich nicht getestet.

Rembrandt Q. Einstein
quelle