Ich muss eine statische Bibliothek erstellen. Ich möchte in meiner iPhone- und iPad-App verwenden. Wenn ich versuche, den Simulator auszuführen, werden Verknüpfungsfehler angezeigt. Ich bin neu in der iOS-Entwicklung. freundlich helfen;
ld: Warnung: Ignoriert die Datei /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a. Die Datei wurde für ein Archiv erstellt, bei dem es sich nicht um die zu verknüpfende Architektur handelt. (i386) Undefinierte Symbole für die Architektur i386:
"_OBJC_CLASS _ $ _ netUtils", referenziert von : objc-class-ref in ViewController.o ld: Symbol (e) für Architektur nicht gefunden i386 clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen)
Ich habe versucht, i386 in den Architekturen hinzuzufügen. aber kein Glück
Build Settings -> Build Active Architecture Only
aufNo
Manchmal irritieren Sie diese Art von Fehlern!
Das Entfernen abgeleiteter Daten funktioniert für mich:
Schritte zu beheben
1) In XCODE> Fenster> Projekt> Projekt auswählen> Löschen abgeleiteten Daten> Quit XCODE und erneut öffnen> Wenn Sie die MAC-O-Linker erhalten builed fehlgeschlagen Fehler> Refere diese link> Sauber und bauen wieder.
quelle
Sie
libnetUtils.a
werden für eine andere Architektur als Ihr Ziel erstellt.Überprüfen Sie die Build-Einstellungen von libnetUtils. Die Architekturen, für die es erstellt wird, und die Liste der unterstützten Architekturen müssen eine (schwache) Obermenge der Architektur Ihres Ziels sein. Die Komplexität besteht darin, dass die resultierende Architektur auf verschiedene Einstellungen verteilt ist: "Architekturen", "Nur aktive Architektur erstellen" und "Gültige Architekturen".
Die Einstellungen "Nur aktive Architektur erstellen" machen dies besonders verwirrend. Angenommen, Sie erstellen für den Simulator. Wenn die Einstellung "Nur aktive Architektur erstellen" für Debug auf NO gesetzt ist, werden alle unter "Architekturen" und "Gültige Architekturen" aufgeführten Architekturen (wahrscheinlich armv7 usw.) erstellt. Wenn libnetUtils diese Einstellung auf Ja gesetzt hat (Debug: Ja), wird sie nur für i386 erstellt. Wenn Ihr Linker versucht, armv7 mit i386 zu verknüpfen, schlägt dies fehl.
quelle
Wenn ich die Warnung "Datei ignorieren" erhalte, würde ich eine ignorierte Datei ausführen
lipo -info
, um die folgende Architektur zu findenlipo -info libnetUtils.a
Das würde entweder i386, armv6, armv7, armv7s, x86_64 usw. drucken. Im Allgemeinen muss diese Architektur mit Ihrer Ziel-Build-Plattform übereinstimmen. Z.B
Abhängig von der Nichtübereinstimmung müssen Sie entweder Ihre Bibliothek für Ihre Zielplattform neu erstellen oder Ihre Zielplattform ändern.
Hinweis: Bei fetten Binärdateien
lipo -info
wird eine Kombination der oben genannten Architekturen gedruckt.quelle
Ich weiß eigentlich nicht, ob mein Rat richtig ist, aber versuche dies zu überprüfen:
Beurteile mich nicht, wenn ich offensichtlich Kapitän bin :)
quelle
Dies bedeutet, dass die Bibliothek, die Sie verwenden möchten, nicht universell für den iOS-Simulator kompiliert wurde (i386-Symbole gelten für den Mac). Das Ausführen auf einem tatsächlichen Gerät sollte jedoch einwandfrei funktionieren.
quelle
Hatte das gleiche Problem und versuchte verschiedene Lösungen von der Seite ohne Erfolg. Ich hatte immer noch eine Nachricht, dass meine Bibliothek nicht für arm64 erstellt wurde.
Endlich, wie ich es gelöst habe:
Es scheint, dass die von XCode angezeigten Build-Einstellungen manchmal unvollständig sind und nicht genau der Projektdatei entsprechen.
quelle
Sie sollten auch überprüfen, ob das Bereitstellungsziel in den Build-Einstellungen für Abhängigkeiten und Abhängigkeiten identisch ist. Ich habe festgestellt, dass iOS 13 für ein statisches Bibliotheksziel festgelegt wurde, während iOS 10.0 für ein Framework definiert wurde, das diese Bibliothek verwendet. Durch Umschalten auf 10.0 wurde das Problem behoben.
quelle
Für mich war es fixiert die Einstellung
Build Active Architecture Only
zuMultiple values
, das zu tun, müssen Sie ihn und ExpandierenDebug
aufYES
undRelease
zuNo
. Und jetzt wird es auf meinem Gerät kompiliert.quelle
Dieses Problem tritt nicht auf, wenn wir die Anwendung auf dem Gerät ausführen. Sie können dies überprüfen, indem Sie den Code auf einem iOS-Gerät ausführen.
quelle
Ich hatte auch eine Architektur von armv7s. Ich habe es gelöscht und sichergestellt, dass armv6 und armv7 die einzigen sind, die aufgelistet sind. Es funktioniert jetzt
quelle