Ich muss eine statische Bibliothek bauen. Ich möchte in meinem iPhone und iPad App verwenden. Wenn ich versuche, den Simulator auszuführen, erhalte ich Verbindungsfehler. Ich bin neu in der iOS-Entwicklung. freundlich helfen;
ld: Warnung: Datei ignoriert /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, 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) nicht gefunden für Architektur i386 clang: Fehler: Linkerbefehl mit Exitcode 1 .__ fehlgeschlagen. (benutze -v, um den Aufruf zu sehen)
Ich habe versucht, i386 in den Architekturen hinzuzufügen. aber kein glück
Nachdem ich mich mit diesem Problem auseinandergesetzt hatte und alle akzeptierten Antworten zum Aktualisieren der Build-Einstellungen, zum Löschen des Linker-Suchpfads usw. befolgt hatte, entdeckte ich schließlich eine Antwort, die für mich funktionierte.
Stellen Sie vor dem Erstellen sicher, dass Sie den richtigen Typ (iPhone Simulator) anstelle von iOS-Geräten auswählen. Dann wieder aufbauen. Andernfalls versuchen Sie, eine für ein iOS-Gerät (Armprozessor) erstellte Bibliothek auf einem Simulator auf Ihrem Mac (i386) zu verwenden. Sollte offensichtlich sein, war es aber nicht.
Vor:
Nach dem:
Schauen Sie nun in der Gruppe "Produkte" im Navigator> klicken Sie mit der rechten Maustaste auf Ihre statische Bibliothek (.a-Datei)> In Finder anzeigen. Sie werden feststellen, dass sie sich in einem Ordner "Debug-iphonesimulator" anstatt "Debug-iphoneos" befindet. Ursprünglich habe ich dem Ordnernamen keine Beachtung geschenkt, oder ich habe früher darüber nachgedacht.
Hoffe das hilft.
Manchmal irritieren diese Arten von Fehlern!
Das Entfernen abgeleiteter Daten funktioniert für mich:
Schritte zu beheben
1) In XCODE> Windows> Projekt> Projekt auswählen> Abgeleitete Daten löschen> XCODE beenden und erneut öffnen> Wenn der MAC-O-Linker Fehler angezeigt wird> Refere this link> Clean and Build.
Ihr libnetUtils.a
wird für eine andere Architektur als Ihr Ziel erstellt.
Überprüfen Sie die libnetUtils-Erstellungseinstellungen. 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 über 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 bauen für den Simulator. Wenn die Einstellung "Nur aktive Architektur erstellen" für Debugger auf NEIN eingestellt ist, werden alle in "Architekturen" und "Gültige Architekturen" aufgeführten Architekturen (wahrscheinlich armv7 usw.) erstellt. Wenn für libnetUtils diese Einstellung auf Yes (Debug: Yes) gesetzt ist, wird nur für i386 gebaut. Wenn Ihr Linker versucht, Armv7 mit i386 zu verknüpfen, schlägt dies fehl.
Wenn ich die Warnung zum Ignorieren der Datei bekomme, würde ich lipo -info
für eine ignorierte Datei ausführen, um die Architektur wie folgt zu finden
lipo -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.
Je nach Übereinstimmung müssen Sie entweder Ihre Bibliothek für Ihre Zielplattform neu erstellen oder Ihre Zielplattform ändern.
Hinweis: Für fette Binärdateien druckt lipo -info
eine Kombination der oben genannten Architekturen.
Ich weiß nicht genau, ob mein Rat richtig ist, aber versuche das zu überprüfen:
Verurteile mich nicht, wenn ich offensichtlich Kapitän bin :)
Dies bedeutet, dass die Bibliothek, die Sie verwenden möchten, nicht allgemein 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 gut funktionieren.
Hatte das gleiche Problem und probierte diverse Lösungen von der Seite aus erfolglos aus ..__ Ich hatte immer noch eine Nachricht, dass meine Bibliothek nicht für arm64 gebaut wurde.
Zum Schluss, wie ich es gelöst habe:
Scheint manchmal, dass die von XCode angezeigten Build-Einstellungen unvollständig sind und nicht genau der Projektdatei entsprechen.
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.
Für mich war es fest eingestellt, dass Build Active Architecture Only
auf Multiple values
gesetzt wurde. Dazu müssen Sie es erweitern und Debug
auf YES
und Release
auf No
setzen. Und jetzt wird es auf meinem Gerät kompiliert.