【问题标题】:Kind of apps (universal vs. apple silicon)应用程序类型(通用与苹果芯片)
【发布时间】:2021-05-02 16:50:36
【问题描述】:

如果我在系统信息中查看我的应用程序列表,一些应用程序具有“通用”类型,而其他应用程序具有“Apple Silicon”。有什么区别?

谢谢!

【问题讨论】:

    标签: macos apple-m1


    【解决方案1】:

    Mach-O 可执行格式支持多个架构在同一个可执行文件中,如aarch64x86_64ppc 等。在 Apple 营销术语中,此类文件通常称为 “胖二进制”通用 应用程序”,因为它允许单个二进制文件,便于在不同平台上发布和执行。

    这在 00 年代 PowerPC->Intel 过渡期间帮助了 Apple,并且现在正在重复使用相同的概念来平滑 x86_64->AArch64 过渡。

    “Apple Silicon” 只是 Apple 用来指代他们内部设计的基于 AArch64 的芯片(移动和桌面)的营销术语。您可以将其视为 "AArch64" 的同义词。

    回到您的问题,系统信息->软件->应用程序中显示的kind 字段显示您计算机上安装的应用程序是针对哪些平台构建的。 “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 都已作为胖二进制文件构建和发布。

    【讨论】:

    • 感谢周到而彻底的回答!
    • 我还有一个问题。如果两者都作为苹果 m1 原生应用程序运行,苹果硅类应用程序会比通用应用程序得到更好的优化和更快吗?
    • Universal 只是一个容器,这意味着同一个二进制文件包含两种架构的代码。您可以将其视为基本上更高级的存档。
    猜你喜欢
    • 2022-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多