web-dev-qa-db-de.com

Xcode4 Linking Problem. Datei wurde für ein Archiv erstellt, bei dem es sich nicht um die verknüpfte Architektur handelt (arm6)

Vor kurzem habe ich zu Xcode4 gewechselt und als ich mein Projekt kompilierte, bekam ich einen Fehler.

ld: warning: ignoring file /Users/myname/Library/Developer/Xcode/DerivedData/appname-hezrgyqimckztgbdlslkavphdclw/Build/Products/Debug-iphoneos/libTapkuLibrary.a, file was built for archive which is not the architecture being linked (armv6)
Undefined symbols for architecture armv6:
  "_OBJC_CLASS_$_TKLoadingView", referenced from:
      objc-class-ref in RootViewController.o

Ich habe die TapkuLibrary geöffnet und überprüft, dass die Architekturen auf 'Standard (armv6 armv7)' gesetzt sind.

Was kann ich tun, um dieses Problem zu beheben?

51
Seunghoon

Ich habe herausgefunden, was das Problem verursacht hat. Ich habe 'Build Active Architecture Only' von TapkuLibrary von Ja zu Nein geändert und es wird ohne Probleme kompiliert.

111
Seunghoon

Ich konnte dieses Problem lösen, indem ich das Gegenteil von der akzeptierten Antwort tat - ich änderte die 'Nur aktive Architektur erstellen' von NEIN auf JA.

35
Josh Brown

Hatte das gleiche Problem. Aber der Grund war anders, denke ich. Ich verwendete die library.a -Datei, die für den Simulator erstellt wurde und versuchte, sie auf dem Gerät auszuführen. Ich hoffe das hilft jemandem;)

For example, here I have imported different library files for device and simulator

11
Zaraki

Dieses Problem trat auf, als ich den XCode auf 4.5 und iOS auf iOS6 aufrüstete. Für GMGridView ist es einfach passiert. Nicht für den Simulator, sondern nur für das Gerät.

Ich habe dies durch folgende Schritte behoben: 1) Gehen Sie zum GMGridView-Projekt -> Build-Einstellungen 2) Wählen Sie unter Einstellung -> Architekturen "Standard (armv7, armv7s)"

Bereinigen Sie dann alle (einschließlich DerivedData) und erstellen Sie sie neu.

Ich hoffe es hilft!

11
sonoshin

Versuchen Sie, die armv6-Architektur zu entfernen, und kompilieren Sie sie nur für armv7.

6
Macmade

Ich habe es geschafft, indem ich auf das "unfreundliche" Projekt geklickt habe (in meinem Fall GMGridView) . Im Tab "Architekturen" habe ich den Wert von etwas geändert (ich erinnere mich nicht mehr genau, ich glaube es war :) armv6s "bis" armv7, armv7 ". Danach hat es für mich funktioniert.

2
tmighty

Dies löste das Problem für mich:

Einige externe Bibliotheken wie Three20 haben zusätzliche Einstellungen vorgenommen

Einstellungen erstellen-> Architekturen-> Beliebiges iOS-SDK

der Wert ist "armv6 armv7", der sich von den standardmäßigen "armv7 armv7s" unterscheidet

dropdown und wählen Sie "Standard", es hat für mich funktioniert.

2
Val

Etwas anderes, das für mich funktionierte, stellte sicher, dass für alle Unterprojekte die Architektur auf armv6 und armv7 gesetzt war, sodass sowohl TARGET als auch PROJECT für jedes Unterprojekt festgelegt wurden. Nachdem wir alles gereinigt und wieder aufgebaut hatten, funktionierte es problemlos.

2
AndyDunn

Stellen Sie sicher, dass die Build-Varianten für Ihre Projekte auf "normal" gesetzt sind.

Wenn Sie ein Projekt erstellen, das andere Projekte enthält, werfen Sie einen Blick in den DerivedData-Ordner des Hauptprojekts. Untersuchen Sie die Archivdateien mit der "lipo -info yourarchive.a". Überprüfen Sie auch die Zeitstempel in diesen Archiven. Möglicherweise stellen Sie fest, dass diese Bibliotheken nicht neu erstellt werden, oder Sie versuchen, eine Verknüpfung zu einer alten Version des Archivs herzustellen, die die falsche Architektur darstellt.

In meinem Fall habe ich Xcode heruntergefahren und den Ordner DerivedData für mein Hauptprojekt gelöscht. Dies erzwang eine vollständige Neuerstellung, als ich das Hauptprojekt in Xcode 4 wieder öffnete. Durch die vollständige Neuerstellung wurden die i386-Archive erstellt (oder die korrekte Version wurde gefunden) und die Simulatorversion wurde korrekt verlinkt.

1
russes

Ich konnte dieses Problem beheben, indem ich einfach eine Adhoc-Konfiguration in den Tapku-Info-Einstellungen erstellte ...

XCODE 4, Project> Archive = Bibliothek nicht gefunden für -lTapkuLibrary - Probleme - devinross/tapkulibrary - GitHub

1
epinom

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 libTapkuLibrary.a

Dies 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.

1
Kiran

Das hat für mich funktioniert:

  1. Klicken Sie auf die "Project" -Datei des betreffenden Frameworks (xcodeproj).

  2. Gehen Sie zur Registerkarte "Info" für das "Projekt" des Frameworks (nicht für "Ziel").

  3. Erweitern Sie 'Konfigurationen' und stellen Sie sicher, dass für 'Debug' und 'Release' zwei Konfigurationen festgelegt sind - eine für das 'Projekt' des Frameworks und eine für das 'Ziel' des Frameworks. Bei Frameworks wird das 'Target' zu einer Bibliothek und nicht zu einer Anwendung kompiliert, sodass man leicht verwirrt werden kann.

  4. Bei "Debug" sollte das Projekt auf "Debug" und die Bibliothek auf "Shared" gesetzt sein.

  5. Bei "Release" sollte das Projekt auf "Release" und die Bibliothek auf "Shared" gesetzt sein.

  6. Kompilieren, ausführen und genießen.

  7. Wenn Sie am Ende Ihr gesamtes Projekt durcheinander gebracht haben und versucht haben, dies herauszufinden, sollten Sie die Projekterstellungsphasen Ihrer Anwendung noch einmal überprüfen (wie von Gon vorgeschlagen). Die Bibliothek sollte dort rot markiert sein, auch wenn sie auf Ihrem Laufwerk nicht vorhanden ist. Ist dies nicht der Fall, sollten Sie es in der Lage sein, es wieder hinzuzufügen.

  8. Wenn Sie Ihr Projekt wirklich wirklich sehr entstellt haben, müssen Sie möglicherweise den DerivedData-Ordner ausblasen, wie von Russes vorgeschlagen. Überprüfen Sie auch den 'Organizer', da Xcode es ermöglicht, Mist überall zu speichern.

  9. Oh, und Sie haben überprüft, ob Armv6 richtig ist? :)

1

Ich habe dieses Problem dank eines anderen Threads behoben, in dem gezeigt wird, dass armv6/armv7 tatsächlich etwas anders ist, als Sie denken: Upgrade auf xcode 4-Fehler Keine Architekturen für

0
pottedmeat

Ich habe alle Optionen ausprobiert und keine hat funktioniert. 

Dies ist die richtige Antwort: 

wenn Sie ein Framework einfach in Ihr Projekt ziehen, wird es nicht richtig verknüpft. (oder etwas in dieser Richtung in jedem Fall) 

sie müssen lediglich das Framework auswählen, das Sie in Build Phases hinzufügen möchten (klicken Sie auf das blaue Symbol Ihres Projekts, wählen Sie unter Ziele den Namen des Projekts aus, und klicken Sie auf die Registerkarte Build Phases), siehe here für mehr referenz. 

0
Gon

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 Make-Datei entsprechen.

0
Eino Gourdin

Keine dieser Antworten funktionierte für mich. (Ähnliche Warnmeldung, anderes statisches Bibliotheksprojekt). Für mich war XCode so konfiguriert, dass die Build-Verzeichnisse der Ziele berücksichtigt werden. Anschließend wurden Ziele in einem lokalen build/-Verzeichnis erstellt, das das Problem verursacht hat. Das Konfigurieren von XCOde für die Verwendung des Ordners "Abgeleitete Daten" wurde behoben.

0
PEZ

Ich hatte dieses Problem mit der Three20-Bibliothek. Das, was schließlich für mich erledigt wurde, war das Umstellen des Projektformats von Xcode 3.1 auf Xcode 3.2 - "Build Active Arch Only" als "Nein" beibehalten.

0
FishStix