如何判断静态库是否是64位编译的?

80

我刚刚使用构建设置为$(ARCHS_STANDARD_INCLUDING_64_BIT)的iOS静态库。

我想确保.a库正确地包含该架构,但是当我在其上运行lipo -info时,我看到:

fat文件中的架构: library.a 是: armv7 armv7s(cputype (16777228) cpusubtype (0))

这是否意味着arm64没有被包括在内?如果lipo命令不能告诉我,那还有其他方法可以告诉吗?

我正在运行安装最新的Command Line工具的Xcode 5。

3个回答

124

是的,有一个 arm64 切片存在。要看到它,您需要使用 iOS 工具链中的 lipo,而不是来自主机系统的 (因为主机系统不知道 arm64):

xcrun -sdk iphoneos lipo -info $(FILENAME)

1
我很好奇 /usr/bin/lipo 和 xcrun 的 lipo 之间的区别。它们似乎并不完全相同。 - pshah
2
根据Stephen的回答,@pshah,似乎/usr/bin/lipo是Mac版本的Lipo,而xcrun的lipo是XCode的lipo。因此,升级到XCode 5意味着通过xcrun获得一个新的lipo。 - Joel Fischer
25
可能是因为一个版本发布在另一个版本之后,所以随同v10.9发布的lipo似乎可以本地识别arm64。无需从Xcode中调用任何内容。当我测试时,仅运行 lipo -info $(FILENAME) 就会在相关库中报告 arm64 等信息。 - Tommy
在我的机器上,运行macOS High Sierra,这两个lipos是完全相同的。 - saagarjha
@saagarjha 是的,默认工具链 lipo 现在已经知道所有支持的架构了;当 arm64 是新的时候,情况并非如此。 - Stephen Canon

69

好老的文件也可以解决问题:

$ 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

似乎目前苹果公司没有人关心将arm64 cputype添加到file中。

有趣的是,在iOS 7技术讲座视频(“构建现代应用程序,第2部分”,PDF第35页)中,他们展示了一个有效的file工具输出:

enter image description here


1
你用的是哪个操作系统版本?我用的是10.9.1,但是'file'命令只列出了cputype而没有arm64。 - Oliver Mason
1
我在你的示例输出中没有看到arm64,这就是我遇到困难的地方。 - Joel Fischer
2
非常酷且快速的工具,可检查支持的文件架构。 - ArdenDev
“file” 在我的情况下没有起作用,它只是显示“current ar archive random library”。使用“lipo -info”就可以了。 - Alec Jacobson

19

针对一个.framework文件

lipo -info myFramework.framework/MyFramework


它如何显示lib是静态的还是动态的? 我的输出: MyFramework的fat文件中的架构为:arm64 x86_64 对于两种类型都是这样。 - Sound Blaster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接