Xcode arm64 与 arm64e

Posted

技术标签:

【中文标题】Xcode arm64 与 arm64e【英文标题】:Xcode arm64 Vs arm64e 【发布时间】:2019-03-08 12:32:59 【问题描述】:

Xcode 10.1 提到了对 arm64e 的支持(预览版)。任何人都对 arm64e 有任何想法。 arm64 和 arm64e 的区别。

https://developer.apple.com/documentation/xcode_release_notes/xcode_10_1_beta_2_release_notes?language=objc

我搜索了 arm64e。但找不到合适的解释。

【问题讨论】:

***.com/questions/52481335/… 【参考方案1】:

arm64e 架构用于 A12 芯片组,该芯片组已添加到最新的 2018 款 iPhone 机型(XS/XS Max/XR)中。代码编译为 ARMv8.3,带来对新功能的支持。即:

指针认证 嵌套虚拟化 高级 SIMD 复数支持 改进的 javascript 数据类型转换支持 内存一致性模型的更改 ID 机制支持更大的系统可见缓存

A12 配备 Apple 设计的 64 位 ARMv8.3-A 六核 CPU

https://en.wikipedia.org/wiki/Apple_A12

也可以在此处阅读有关架构的更多信息:

https://community.arm.com/processors/b/blog/posts/armv8-a-architecture-2016-additions

【讨论】:

【参考方案2】:

要使用应用测试 arm64e,请更新 Build Settings 中的 Architectures 设置。更多详情请访问https://developer.apple.com/documentation/security/preparing_your_app_to_work_with_pointer_authentication。

请注意,如果您有 CocoaPods 依赖项,则所有 Pods 构建目标都必须进行类似的更改。

如果任何 CocoaPods 依赖项是二进制而不是源 pod,请向供应商发出请求,例如 https://github.com/firebase/firebase-ios-sdk/issues/4110

【讨论】:

【参考方案3】:

arm64arm64e

两者都是ABIs(较低级别的 API),可编译为指令(由 ISA/指令集架构定义)。 arm64e 用于 Mac M1 和 iPhone。它们之间的区别是Giovanni's answer中的点。

arm64eARMv8.3?

两者都被含糊地称为“架构”。 arm64e 不是 ISA,而是 ABI(应用程序二进制接口),而 ARMv8.3 是 ARM ISA(技术上是 AArch64 的扩展)。

总之,arm64e 是一个 ABI(通常称为架构,但不是 ISA),它编译为真正的 ISA。新的 Apple 设备使用 arm64e,包括 M1 mac。

iPhone(例如 A14、A15)、M1 Mac、M1 Pro Mac 等

他们都使用 arm64e ABI,但 Apple 拥有 ISA 许可证,并创建自定义 ISA。

ABI 与架构?

android 文档有一个关于Android ABIs 的有用指南,其中包含一般信息:

不同的 Android 设备使用不同的 CPU,这反过来又支持 不同的指令集。 CPU和指令的每种组合 set 有自己的应用程序二进制接口 (ABI)。 ABI 包括 以下信息: read more there

【讨论】:

以上是关于Xcode arm64 与 arm64e的主要内容,如果未能解决你的问题,请参考以下文章

无法以 64 位模式 (arm64) 构建我的 XCode 项目

Xcode 5 命令行:架构“arm64”的部署目标“3.0.0”无效

XCode - 架构 armv7 arm64 的未定义符号

Xcode 12 Apple M1 arm64 - 可设计错误:“错误的架构”

Xcode:MagTek iOS 库中缺少 arm64 符号

Xcode 8:找不到用于 pod 的架构 arm64 的符号