如何检查是否为64位构建了静态库?


74

我刚刚为iOS构建了一个静态库,并将Architectures的构建设置设置为$(ARCHS_STANDARD_INCLUDING_64_BIT)

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

胖文件:library.a中的体系结构是:armv7 armv7s(cputype(16777228)cpusubtype(0))

这是否意味着不包括arm64?如果lipo命令无法告诉我,还有另一种方法可以告诉我吗?

我正在安装最新的命令行工具来运行Xcode 5。

Answers:


119

是的,那里有一个arm64切片。要查看它,您需要lipo从iOS工具链中使用,而不是从主机系统(不了解arm64)中使用:

xcrun -sdk iphoneos lipo -info $(FILENAME)

1
我很好奇/ usr / bin / lipo和xcrun的lipo之间的区别。似乎它们不是一模一样的。
pshah

2
@pshah根据Stephen的回答,似乎/ usr / bin / lipo是Mac的Lipo版本,而xcrun的lipo是XCode的lipo。因此,更新到XCode 5意味着通过xcrun获得新的lipo。
乔尔·菲舍尔

23
大概是因为一个出现在另一个之后,所以lipov10.9附带的似乎可以原生识别arm64。无需从Xcode调用任何东西。测试时,运行情况只是为我lipo -info $(FILENAME)报告arm64了相关库的信息。
汤米

在运行macOS High Sierra的计算机上,脂质既相同又相同。
saagarjha

@saagarjha是的,默认工具链lipo现在知道所有受支持的体系结构。当arm64是新的时,情况并非如此。
斯蒂芬·佳能

66

好老file也可以做到这一点:

$ 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

似乎没有人愿意在Apple上添加arm64 cputype file

有趣的是,在iOS 7技术讲座视频(“ Architecting Modern Apps,Part 2”,PDF第35页)中,它们显示了工作文件工具的输出:

在此处输入图片说明


1
您在哪个操作系统版本上?我在10.9.1上,“文件”仅列出了cputype而不是arm64。
奥利弗·梅森

我在您的示例输出中没有看到arm64,这是我遇到的麻烦
Joel Fischer

2
检查支持的文件体系结构的非常酷而又快速的工具
ArdenDev 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.