Datei ist universell (drei Slices), enthält aber keinen (n) ARMv7-s-Slice-Fehler für statische Bibliotheken unter iOS, trotzdem zu umgehen?


403

Ich habe die Xcode- Version aktualisiert und bei Verwendung externer statischer Bibliotheken wird folgende Meldung angezeigt:

ld: Datei ist universell (3 Slices), enthält jedoch kein (n) armv7s Slice: / Datei / Speicherort für Architektur armv7s clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen)

Gibt es eine Möglichkeit, dies zu umgehen und der Bibliothek Unterstützung hinzuzufügen, wenn der Entwickler der Bibliothek seine Bibliothek noch nicht aktualisiert hat?


Antworten:


418

Wenn Sie die Unterstützung für eine Architektur entfernen möchten, z. B. ARMv7-s in Ihrem Fall, verwenden Sie das Menü Projekt -> Build-Einstellungen -> Entfernen Sie die Architektur aus "gültigen Architekturen".

Sie können dies als temporäre Lösung verwenden, bis die Bibliothek aktualisiert wurde. Sie müssen die Architektur aus Ihrem Hauptprojekt entfernen, nicht aus der Bibliothek.

Alternativ können Sie das Flag für "Nur aktive Architektur erstellen" Ihrer Debug-Konfiguration auf "Ja" setzen. Belassen Sie die Option "Nur aktive Architektur erstellen" in der Release-Konfiguration auf "Nein", damit Sie vor der Veröffentlichung eine Erinnerung erhalten, dass Sie alle von Ihnen verwendeten Bibliotheken von Drittanbietern aktualisieren sollten.


11
Sie müssen die Bibliothek nicht neu kompilieren. Sie können dieses Flag aus dem Projekt entfernen, das die Bibliothek verwendet.
Nicholas

4
Es wird funktionieren, da alte Apps, die nicht mit armv7s-Unterstützung kompiliert wurden, ebenfalls ausgeführt werden müssen. Sie verlieren jedoch einige spezifische Optimierungen. Dies sollte ohnehin eine vorübergehende Problemumgehung sein.
Nicholas

2
Dropbox Framework wurde für dieses Problem aktualisiert, siehe forums.dropbox.com/topic.php?id=90014
Railwayparade

6
Das Entfernen von armv7s aus der Liste der gültigen Architekturen hat bei mir funktioniert, das Entfernen aus den Architekturen jedoch auch. In beiden Fällen würde ich jedoch No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).vom Linker erhalten, den ich nur durch Hinzufügen i386zur Liste der gültigen Architekturen lösen konnte .
Levigroker

6
Nein, armv7s ist der Befehlssatz des A6-Prozessors, der im iPhone 5 verwendet wird. Da der A6 abwärtskompatibel ist, wird der armv7-Befehlssatz weiterhin ausgeführt.
Nicholas

191

Ich habe in den Build-Einstellungen des Ziels einfach "Nur aktive Architektur erstellen" auf "Ja" umgeschaltet, und jetzt ist es in Ordnung!


1
@ Blasco73 Weißt du überhaupt, dass du großartig bist? Du solltest. Hier geht's, Sir, sind großartig!
Thandasoru

15
Wie kann das eine gute Lösung sein? Es behebt den Fehler, aber Sie erhalten nur Build für den aktuellen Bogen, nicht alle auf dem Markt ...
Esbenr

27

Versuchen Sie, armv7s aus der "Gültigen Architektur" des Projekts zu entfernen, um dieses Problem für iOS 5.1-Telefone zu lösen


13

Ich habe gerade gebucht ein Update hier , dass auch in diesem Fall gelten würde - im Grunde, was Sie tun ein Hex - Suchen und Ersetzen in Ihrer externen Bibliothek dafür , dass es den ARMv7s Code denken. Sie sollten in der Lage sein, lipoes in 3 statische Bibliotheken aufzuteilen, die ARMv7-Bibliothek zu duplizieren / zu ändern und dann lipoerneut eine neue Bibliothek für alle 4 Architekturen zusammenzustellen.


5

Flurry-Unterstützung für iPhone 5 (ARMv7s) Wie bereits im gestrigen Beitrag erwähnt, begann Flurry unmittelbar nach der Ankündigung am Mittwoch mit der Arbeit an einer Version des iOS SDK, um den ARMv7s-Prozessor im neuen iPhone 5 zu unterstützen.

Ich freue mich, Ihnen mitteilen zu können, dass die Arbeit erledigt ist und das SDK jetzt auf der Website verfügbar ist.


4

Verwenden Sie das Menü Projekt -> Build-Einstellungen ->

Entfernen Sie dann armv7s aus den "gültigen Architekturen". Wenn Standard gewählt wurde, löschen Sie diesen und fügen Sie dann armv7 hinzu.


1

Für den Fall, dass dies jemandem passiert. Ich habe meine eigene Bibliothek erstellt, um sie mit einem Code von Drittanbietern zu verwenden. Während ich es für die Lieferung erstellt habe, habe ich versehentlich mein iPhone 4S angeschlossen gelassen, und so hat Xcode meine Bibliothek nur für die angeschlossene Architektur erstellt, anstatt den Projekteinstellungen zu folgen. Entfernen Sie alle angeschlossenen Geräte und erstellen Sie die Bibliothek neu, verknüpfen Sie sie, und alles sollte in Ordnung sein.

Ich hoffe es hilft.


0

In meinem Fall habe ich eine Verknüpfung zu einer etwas alten Drittanbieter-Bibliothek hergestellt (entwickelt für iOS 6 unter XCode 5 / iOS 7). Daher musste ich die Bibliothek eines Drittanbieters aktualisieren, ein Clean and Build durchführen und sie wurde nun erfolgreich erstellt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.