it-swarm.com.de

Xcode 6 linker error - Undefinierte Symbole für Architektur-Armv7

Nach dem Upgrade auf Xcode 6 Beta 7 (und jetzt noch mit Xcode 6 GM) kann ich meine Swift-App nicht verknüpfen. Ich erhalte Fehler wie:

Undefinierte Symbole für Architektur Armv7: "_Swift_stdlib_compareNSStringDeterministicUnicodeCollation", referenziert von:

...

ld: Symbol (e) für Architektur-Armv7 .__ nicht gefunden. clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen)

Ich habe die anderen SO - Posts gesehen, in denen empfohlen wird, den Ordner Abgeleitete Daten zu löschen und/oder die Option zum Bereinigen von Build-Ordnern zu verwenden, um an diesem Fehler vorbeizukommen, aber diese Lösung half in meinem Fall überhaupt nicht. An meinem Code oder den CocoaPods, die ich seit Xcode 6 Beta 5 verwende, hat sich nichts geändert.

Irgendwelche Ideen?

BEARBEITEN:

Eine vollständige Buchung des Fehlerprotokolls:

Undefinierte Symbole für Architektur arm64: "_Swift_stdlib_compareNSStringDeterministicUnicodeCollation", referenziert von: TFC12MyProject21BarcodeViewController13captureOutputfS0_FTGSQCSo15AVCaptureOutput_24didOutputMetadataObjectsGSQGSaPSs9AnyObject___14vonConnectionGSQCSOAVAVaptersConnection__Tool. "__TFSs21_arrayConditionalCastU___FGSaQ__GSqGSaQ0_ ", referenziert von: TFC12MyProject27SessionsTableViewController17viewWillDisappearfS0_FSbT_ in SessionsTableViewController.o "__TFSs15_arrayForceCastU___FGSaQ__GSaQ0 ", referenziert von: __TFC12MyProject7RestApi12tokenMappingfS0_FT_CSo15RKEntityMapping in RestApi.o __TFC12MyProject28AttendeesTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController in AttendeesTableViewController.o __TFC12MyProject27SessionsTableViewControllerg24fetchedResultsControllerCSo26NSFetchedResultsController in SessionsTableViewController.o __TFC12MyProject21BarcodeViewController13startScanningfS0_FT_Sb in BarcodeViewController.o "__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_", referenziert von: __TFC12MyProject7RestApi12resetRestKitfS0_FT_T_ in RestApi.o __TFC12MyProject16BluetoothManager17_startAdvertisingfS0_FT_T_ in BluetoothManager.o __TFC12MyProject19LoginViewController32registerForKeyboardNotificationsfS0_FT_T_ in LoginViewController.o __TFC12MyProject19LoginViewController35deregisterFromKeyboardNotificationsfS0_FT_T_ in LoginViewController.o __TFC12MyProject19LoginViewController16callProcessLoginfS0_FT_T_ in LoginViewController.o __TFC12MyProject21CheckinViewController16enableBeaconModefS0_FT_T_ in CheckinViewController.o __TFC12MyProject21BarcodeViewController13startScanningfS0_FT_Sb in BarcodeViewController.o ... ld: Symbol (e) für Architektur-Arm64 nicht gefunden clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen)

23
davidethell

Was hier passiert, hat nichts mit Ihrem Standort für abgeleitete Daten zu tun.

Wenn eine Swift-Anwendung erstellt wird, durchläuft sie mehrere Schritte:

  • Hilfsdateien schreiben

  • Produktstruktur erstellen

  • Kompilieren Sie die Swift-Quelle für jede Architektur

  • Kopieren Sie die Ressourcenregelplist

  • Kopieren Sie den Überbrückungsheader der Anwendung

  • Verknüpfung mit Swift-Laufzeitbibliotheken für jede Architektur

  • Kopieren Sie das Swift-Modul der Anwendung für jede Architektur

  • Erstellen Sie die Anwendungsbinärdatei

  • Phase zum Erstellen von Ressourcen kopieren

  • Kopieren Sie die Swift-Standardbibliotheken in die Anwendung

  • Verpacken Sie es

  • Unterschreib es

Wütend! Das ist viel. Ihr Build schlägt fehl, wenn Sie eine Verknüpfung mit den Swift-Laufzeitbibliotheken herstellen. Sie leben in Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos im Xcode-Entwicklerverzeichnis. Die Bibliothek, die nicht korrekt verknüpft wird, ist libswiftCore.dylib. Wenn Sie nm für diese Bibliothek verwenden, können Sie sehen, dass Ihr erstes fehlendes Symbol definiert wird:

quellish% nm /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos/libswiftCore.dylib | grep compareNSStringDeterministicUnicodeCollation
00197c8c T _Swift_stdlib_compareNSStringDeterministicUnicodeCollation
000000000018352c T _Swift_stdlib_compareNSStringDeterministicUnicodeCollation

Sie können auch lipo verwenden, um zu sehen, welche Architekturen in der Datei enthalten sind:

quellish% xcrun lipo -info /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos/libswiftCore.dylib
Architectures in the fat file: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/Swift/iphoneos/libswiftCore.dylib are: armv7 arm64

Es enthält armv7 und arm64. Das Problem ist nicht die Bibliotheksarchitektur.

Die Verknüpfung mit der Swift-Standardbibliothek funktioniert nicht. Es ist möglich, dass die Quellcodeverwaltung oder die Migration von Xcode-Versionen dazu geführt hat, dass Ihre Projektdatei einen Teil des Verknüpfungsschritts gelöscht hat, oder die Bibliotheken, mit denen sie verknüpft werden müssen, nicht gefunden werden können. Xcode-Projektdateien sind komplex und verwenden viele Referenzen - es könnte sein, dass eine Zusammenführung usw. dazu führt, dass eine kritische Referenz vom Verknüpfungsschritt getrennt wird. Ohne ein vollständiges Build-Protokoll und einen Blick auf Ihren Computer ist es möglicherweise nicht möglich, dies zu sagen. 

Wie Sie sich vorstellen können, hat diese Bibliothek nichts mit dem abgeleiteten Datenort des Projekts zu tun.

Der beste Weg, um voranzukommen, wäre leider das Wiederherstellen der Projektdatei. Der Vergleich des Build-Logs des defekten Projekts mit einem Swift-Projekt, das korrekt erstellt wird, kann einige Erkenntnisse liefern, aber es kann auch Zeitverschwendung sein - etwas Fixierbares kann das Problem sein, aber wahrscheinlicher nicht.

Ich möchte Sie dazu auffordern, einen Fehler einzureichen und die problematische Projektdatei beizufügen. 

17
quellish

Ich habe mein Problem gelöst, indem ich alle Daten im Ordner ~/Library/Developer/Xcode/DerivedData gelöscht habe. Ich habe darüber in einem anderen Thread gelesen, aber ich habe es ignoriert, weil ich dachte, dass dieser Prozess sauber ist. 

9
Brad R

Ich habe auf Yosemite aktualisiert, Xcode 6.1 ..__ Ich habe Gem xcodeproj (0.19.4) und Cocoapods (0.34.4) aktualisiert.

Ich habe meinen Konflikt gelöst durch:

Löschen des Library/Developer/Xcode/DerivedData-Ordners

ersetzen Sie in Target -> Build Settings -> Linking -> Other Linker Flags: $ (OTHER_LDFLAGS)

Check in Target -> Build Phases -> Pods-Ressourcen kopieren: "$ {SRCROOT}/Pods/Target-Unterstützungsdateien/Pods/Pods-resources.sh"

8
Tayfundu37

1) Ich habe das gleiche Problem, lösche aber nur die Anwendungen von User/Library/Developer/Xcode/DerivedData und ich kann den Code ausführen.

2) In Ihrem Fall wird es ausgeführt, indem Sie die armv7-Architektur aus den Build-Einstellungen entfernen. Stellen Sie sicher, dass Ihr Compiler in den Build-Einstellungen Standard-Compiler ist.

Danke, ich hoffe, das ist hilfreich für Sie und alle. 

3

"Aufgerüstet" auf xcode 6 und die Swift-App würde nicht für den Simulator erstellt werden, würde jedoch einen iPad-Linker-Fehler und nicht definierte Symbole für i386 für den Simulator gut machen.

Das Löschen des Library/Developer/Xcode/DerivedData-Ordners funktionierte für mich.

0
m0thman

Ich hatte ein ähnliches Problem (Linker-Fehler von Apples Framework). Wie sich herausstellte, bestand das Problem darin, dass mir die Bibliothek LocalAuthentication.framework fehlte. Ich frage mich, ob Sie möglicherweise das Foundation.framework von der Registerkarte "Build-Phase" (im Abschnitt "Link Libraries") löschen und es dann erneut hinzufügen müssen. Vielleicht löst das das Problem? 

0
user3562213

Dies scheint (für die meisten) durch die Verknüpfung einer Drittanbieter-Bibliothek verursacht zu werden, die die angeforderte Architektur nicht unterstützt.

0
Joshua Nozzi

Ich habe dieses Problem gelöst, nachdem ich alles versucht hatte, was hier ohne Erfolg vorgeschlagen wurde. Wie bereits gesagt, handelt es sich um ein SourceControl-Problem.

Eine meiner Projektdateien (die in der Fehlermeldung angegebene Datei) fehlte im Projektbrowser. XCode hatte jedoch immer noch einen Verweis darauf (ich ging zur Klassendefinition, als ich "Sprung zur Definition" von Xcode GUI auswählte).

Tatsächlich hat das Projekt.pbxproj es nicht aufgeführt. Dies war wahrscheinlich ein Git-Problem. In jedem Fall habe ich die Datei in demselben Verzeichnis neu erstellt, in dem sie erstellt wurde, und voila.

0
GrandSteph

Es scheint einen Fehler in Xcode 6.0.1 zu geben, der dazu führt, dass der Linker Abhängigkeiten in vorhandenen Projektdateien löscht. Dieses Problem hatte ich seit dem Update 6.0.1 in mehreren verschiedenen Projekten, neuen und alten.

Der einfache "Fix" besteht darin, die gesamten "Derrived Data" und alle Build-Dateien (d. H. Das Projekt manuell bereinigen) zu verwerfen und nach einem Neustart von Xcode neu zu erstellen. Magisch findet der Linker nun alle fehlenden Architekturen/Symbole.

HINWEIS: Ich hatte mehrere inkompatible V-Table-Abstürze, die durch denselben Fehler verursacht wurden. Der C++ - Linker scheint unvollständige Verknüpfungen zu erzeugen, was zu absurden Fehlern führt, wenn keine real - Fehler gefunden werden. Wiederum nur aus einem sauberen Zustand umbauen und .. ta da .. ersparen Sie sich VIEL Kopfschmerzen und Zeitverschwendung, um ein Problem zu finden.

0
Ralph K

Ich bin ein Stutfohlen, wenn es um iOS Objective C geht, obwohl ich seit vielen Jahren in mehreren anderen Sprachen programmiere. Deshalb steche ich meistens mit Objective C im Dunkeln herum. 

Ich bekam diesen Fehler "Undefinierte Symbole für Architektur-Armv7", direkt nachdem ich einige "globale" Variablen in meiner .h-Datei deklariert hatte: 

extern NSString *globalNotes;
extern NSString *globalUserCountry;

Ich bezog mich dann auf diese Variablen aus der .m-Datei wie folgt:

globalNotes= @"Error (Marker 1010)";
globalUserCountry= @"No result";

THE FIX - Um dies zu korrigieren, habe ich sie wie folgt in Objekteigenschaften geändert:

@property(nonatomic, strong, readwrite) NSString *globalNotes;
@property(nonatomic, strong, readwrite) NSString *globalUserCountry;

Und wie so auf sie verwiesen:

self.globalNotes= @"Error (Marker 1010)";
self.globalUserCountry= @"No result";

Das schien mein Problem zu lösen.