Wie überprüfe ich, ob eine statische Bibliothek für 64-Bit erstellt wurde?

74

Ich habe gerade eine statische Bibliothek für iOS mit der Build-Einstellung für Architekturen erstellt $(ARCHS_STANDARD_INCLUDING_64_BIT).

Ich möchte sicherstellen, dass die .a-Bibliothek diese Architektur ordnungsgemäß enthält, aber wenn ich sie ausführe lipo -info, sehe ich:

Architekturen in der Fat-Datei: library.a sind: armv7 armv7s (cputype (16777228) cpusubtype (0))

Bedeutet dies, dass arm64 nicht enthalten ist? Wenn der Lipo-Befehl es mir nicht sagen kann, gibt es eine andere Möglichkeit, es zu sagen?

Ich verwende Xcode 5 mit den neuesten installierten Befehlszeilentools.

Joel Fischer
quelle

Antworten:

119

Ja, ein arm64-Slice ist da. Um es zu sehen, müssen Sie es lipoaus der iOS-Toolchain verwenden, nicht vom Host-System (das nichts über arm64 weiß):

xcrun -sdk iphoneos lipo -info $(FILENAME)
Stephen Canon
quelle
1
Ich bin gespannt auf den Unterschied zwischen / usr / bin / lipo und xcruns Lipo. Es scheint, als wären sie nicht ein und dasselbe.
Pshah
2
@pshah Basierend auf Stephens Antwort scheint es, dass / usr / bin / lipo die Mac-Version von Lipo ist, während xcruns Lipo XCodes Lipo ist. Ein Update auf XCode 5 bedeutete also, einen neuen Lipo über xcrun zu bekommen.
Joel Fischer
23
Vermutlich, weil der eine nach dem anderen lipoherauskam, scheint der mit v10.9 gelieferte Arm64 nativ zu erkennen. Sie müssen nichts von Xcode aus aufrufen. Laufen wurde beim Testen einfach unter anderem für eine für mich relevante Bibliothek lipo -info $(FILENAME)gemeldet arm64.
Tommy
Auf meinem Computer, auf dem macOS High Sierra ausgeführt wird, sind die Lipos ein und dasselbe.
Saagarjha
@saagarjha Ja, die Standard-Toolchain lipokennt jetzt alle unterstützten Architekturen. Dies war nicht der Fall, als arm64 neu war.
Stephen Canon
66

Auch gute Alte filekönnen es schaffen:

$ file libTestFlight.a

libTestFlight.a: Mach-O universal binary with 5 architectures
libTestFlight.a (for architecture armv7):   current ar archive random library
libTestFlight.a (for architecture armv7s):  current ar archive random library
libTestFlight.a (for architecture i386):    current ar archive random library
libTestFlight.a (for architecture x86_64):  current ar archive random library
libTestFlight.a (for architecture cputype (16777228) cpusubtype (0)):   current ar archive random library

Es scheint, dass sich noch niemand bei Apple darum gekümmert hat, den arm64-Cputyp hinzuzufügen file.

Interessanterweise zeigen sie in den iOS 7 Tech Talk-Videos ("Architecting Modern Apps, Part 2", PDF Seite 35) die Ausgabe eines Arbeitsdateientools:

Geben Sie hier die Bildbeschreibung ein

Nikolai Ruhe
quelle
1
Auf welcher Betriebssystemversion bist du? Ich bin auf 10.9.1 und 'file' listet nur den cputype anstelle von arm64 auf.
Oliver Mason
Ich sehe keinen arm64 in Ihrer Beispielausgabe, was ich nicht sehen konnte
Joel Fischer
2
wirklich cooles und schnelles Tool, um nach unterstützten Dateiarchitekturen zu
suchen
18

Für ein .framework

lipo -info myFramework.framework/MyFramework

Matthieu Riegler
quelle