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?
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.
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.
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;)
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!
Versuchen Sie, die armv6-Architektur zu entfernen, und kompilieren Sie sie nur für armv7.
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.
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.
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.
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.
Ich konnte dieses Problem beheben, indem ich einfach eine Adhoc-Konfiguration in den Tapku-Info-Einstellungen erstellte ...
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.
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.
Das hat für mich funktioniert:
Klicken Sie auf die "Project" -Datei des betreffenden Frameworks (xcodeproj).
Gehen Sie zur Registerkarte "Info" für das "Projekt" des Frameworks (nicht für "Ziel").
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.
Bei "Debug" sollte das Projekt auf "Debug" und die Bibliothek auf "Shared" gesetzt sein.
Bei "Release" sollte das Projekt auf "Release" und die Bibliothek auf "Shared" gesetzt sein.
Kompilieren, ausführen und genießen.
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.
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.
Oh, und Sie haben überprüft, ob Armv6 richtig ist? :)
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
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.
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 Make-Datei entsprechen.
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.
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.