应用程序类型(通用 vs. 苹果硅)

7

当我在“系统信息”中查看我的应用程序列表时,有些应用程序的“种类”是通用的,而其他应用程序是“Apple Silicon”的。它们之间有什么区别?

谢谢!

1个回答

10
Mach-O可执行格式支持将多个架构打包在同一文件中,例如aarch64、x86_64、ppc等。这样的文件通常被称为“fat binary”或是苹果市场术语中的“Universal应用程序”,因为它允许单个二进制文件轻松地在不同平台上发布和执行。
这种方法在 2000 年代 PowerPC 到 Intel 的转变期间帮助了苹果公司,现在相同的概念正在重新被使用以简化 x86_64 到 AArch64 的过渡。
“Apple Silicon”只是苹果公司用来指代他们自行设计的基于AArch64芯片的营销术语。您可以将其视为“AArch64”的同义词。
回到您的问题,系统信息->软件->应用程序中显示的“类型”字段可以显示已安装在计算机上的应用程序所建立的平台。一个“Apple Silicon”应用程序将只包含为AArch64构建的代码,一个“Intel”应用程序只能在x86_64下运行,“Universal”应用程序将包含两者的代码。
您还可以使用XCode工具中的“lipo”工具来检查给定的Mach-O二进制文件中包含哪些架构:
$ lipo -detailed_info /Applications/Firefox.app/Contents/MacOS/firefox
Fat header in: /Applications/Firefox.app/Contents/MacOS/firefox
fat_magic 0xcafebabe
nfat_arch 2
architecture x86_64
    cputype CPU_TYPE_X86_64
    cpusubtype CPU_SUBTYPE_X86_64_ALL
    capabilities CPU_SUBTYPE_LIB64
    offset 4096
    size 41728
    align 2^12 (4096)
architecture arm64
    cputype CPU_TYPE_ARM64
    cpusubtype CPU_SUBTYPE_ARM64_ALL
    capabilities 0x0
    offset 49152
    size 91232
    align 2^14 (16384)
$ lipo -detailed_info /bin/ls
Fat header in: /bin/ls
fat_magic 0xcafebabe
nfat_arch 2
architecture x86_64
    cputype CPU_TYPE_X86_64
    cpusubtype CPU_SUBTYPE_X86_64_ALL
    capabilities 0x0
    offset 16384
    size 59536
    align 2^14 (16384)
architecture arm64e
    cputype CPU_TYPE_ARM64
    cpusubtype CPU_SUBTYPE_ARM64E
    capabilities PTR_AUTH_VERSION USERSPACE 0
    offset 81920
    size 75440
    align 2^14 (16384)

正如您所见,Firefox和系统提供的ls都被构建并发布为通用二进制文件。


感谢您周到和详尽的回答! - Steve
我有另一个问题。如果两者都作为苹果M1本地应用程序运行,那么苹果硅应用程序是否会比通用应用程序更优化和更快? - Rimvydas
Universal只是一个容器,这意味着相同的二进制文件包含了两种架构的代码。你可以将其看作是更高级的存档。 - mcilloni

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