it-swarm.com.de

datei wurde für ein Archiv erstellt, bei dem es sich nicht um die verknüpfte Architektur handelt (i386)

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

70
yarlg

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:

iOS Device Settings

Nach dem:

iPhone 5.1 Simulator Settings

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.

71
Cody A. Ray

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.

41

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.

27
achow

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.

  • i386 = ios simulator oder 32 bit build auf mac os x
  • armv6 armv7 arm7s = ios-gerät
  • x86_64 = 64-Bit-Build auf Mac OS X

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.

22
Kiran

Ich weiß nicht genau, ob mein Rat richtig ist, aber versuche das zu überprüfen:

  • Wählen Sie Ihr Projekt aus
  • Wähle "Build-Einstellungen"
  • Überprüfen Sie die Architekturen:
    • Gültige Architekturen sollten "armv6 armv7" sein.
    • Unterstützte Plattformen sollten "Iphonesimulator Iphone" sein (vielleicht iPad, ich weiß es nicht)
    • Basis-SDK - Ihr iOS-SDK (ich habe iOS 5.0).

Verurteile mich nicht, wenn ich offensichtlich Kapitän bin :)

9

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.

5
CodaFi

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:

  • öffnete die Datei project.pbxproj für die Bibliothek in einem Texteditor
  • gesucht nach VALID_ARCHS
  • es gab 4 Vorkommen, von denen 2 nicht arm64 enthielt
  • Ich habe arm64 manuell in die Kette eingefügt (VALID_ARCHS = "arm64 i386 armv7 armv7s")
  • die lib neu aufbauen und alles war in ordnung

Scheint manchmal, dass die von XCode angezeigten Build-Einstellungen unvollständig sind und nicht genau der Projektdatei entsprechen.

3
Eino Gourdin

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.

0
JESERRANO