警告“将架构 arm64 映射到 x86_64”是啥意思?

Posted

技术标签:

【中文标题】警告“将架构 arm64 映射到 x86_64”是啥意思?【英文标题】:What does warning "Mapping architecture arm64 to x86_64" mean?警告“将架构 arm64 映射到 x86_64”是什么意思? 【发布时间】:2018-11-18 23:48:15 【问题描述】:

将我的框架迁移到 Xcode 10 beta (10L176w) 后,我开始收到如下警告:

将架构 arm64 映射到 x86_64。确保为 ios 模拟器平台正确配置了此目标的 Architectures 和 Valid Architectures 构建设置。

...和:

将架构 armv7 映射到 i386。确保为 iOS 模拟器平台正确配置了此目标的 Architectures 和 Valid Architectures 构建设置。

尽管有这些警告,但构建和单元测试都通过了。我正在使用 Swift 4.2。

不过,这些警告是关于什么的?

【问题讨论】:

我在尝试仅使用 ARCHS = $(ARCHS_STANDARD_64_BIT)VALID_ARCHS = $(inherited) x86_64 i386 构建 64 位时看到此问题 【参考方案1】:

您可能已为目标或其项目覆盖了 VALID_ARCHS(“有效架构”)构建设置。这是一个构建设置,应该根据您正在构建的运行目标自动获取其值。当你弄清楚这个覆盖来自哪里(覆盖时构建设置将显示为粗体),选择它并按删除键将其恢复为默认值。

【讨论】:

我也看到了这个错误。我没有覆盖设置VALID_ARCHS。它包含用于调试和发布的arm64 这似乎是 Xcode 10 中的一个错误。在默认设置下仍然会发生 这个但似乎仍然出现在 Xcode 10 的发行版中。有人对此有任何更新吗? me2,我只是在谷歌上搜索,但无济于事 我需要转到我的所有子项目和目标并删除 VALID_ARCHS 以将其设置为默认值,然后再次清理并关闭/打开 Xcode 以使其完全为我工作【参考方案2】:

我可以通过将我的 Valid Architectures 设置更改为与我的 Architectures 设置匹配的 $(ARCHS_STANDARD) 来消除这些警告。

奇怪的是,这显示为 armv7 arm64(与默认设置 armv7 armv7s arm64 相比),但手动将其设置为该值仍会导致警告。不知道这有什么意义,但我在测试中还没有发现任何问题。

【讨论】:

此设置对我来说适用于针对 iOS 和 macOS 的“通用”框架。 这是我的解决方案。我在 Project 和 Targets 中设置了有效的架构:$(ARCHS_STANDARD)。谢谢。 @CGN 你如何在项目中设置?我为 Targets 设置成功。 @Erum:见下面的 2 张截图【参考方案3】:

转到构建设置并按照如下所示进行操作

【讨论】:

我确认,这对我有用 - 我不知道为什么,但这些设置在项目和目标构建设置中都以粗体突出显示。然后我如上所述删除了(在两个地方!),这只是删除了粗体突出显示(显然恢复为默认值),警告消失了 澄清一下,必须在项目和目标上都这样做。 不错的答案,我建议将其作为解决方案。 当我删除它时,Resolved 中没有显示任何内容,我得到 There are no valid architectures to compile for because the VALID_ARCHS build setting is an empty list 似乎不再起作用了。我遇到了 Crystal 使用 Xcode 11 beta 6 报告的同样问题。@John 的回答对我有用【参考方案4】:

如果您的 [build Settings] 是 armv7 armv7s arm64,请删除 armv7s。警告将被取消。

【讨论】:

这不仅仅是关于 armv7,这是一个普遍问题,您的建议不具有前瞻性【参考方案5】:

与其他答案类似,我可以通过将 $(VALID_ARCHS)(有效架构)更改为 $(ARCHS_STANDARD) 来删除警告。从那里,我清除了所有派生数据并重新启动了 Xcode 10.0。这使得警告完全消失。从有效架构中删除所有内容只会出现不同的警告(“未找到有效架构”)。

【讨论】:

【参考方案6】:

当我尝试为 iOS 和 Mac OS 编译代码时,我看到了这个警告。 我首先按照 Hassan Taleb 在他的回答中建议的方法解决了这个问题:清除架构,以便只有有效的 iPhone 架构在其中。最后,为了保持能够为 Mac OS 构建,将鼠标悬停在 Valid Architectures 上,以便出现一个加号按钮。单击它,然后您可以根据需要为不同平台添加单独的设置,包括不同的 CPU 架构。对于 macOS SDK,如果我愿意,我可以将我的 Valid Architectures 设置为 x86_64。

【讨论】:

在当前 Xcode 上不再存在这个选项。 @lambdapool 您没有看到哪个选项?是“有效架构”/“VALID_ARCHS”吗?【参考方案7】:

对于报告警告的目标,将“有效架构”设置更改为:

$(VALID_ARCHS)
x86_64

【讨论】:

肯定是最佳答案!【参考方案8】:

解决方案更简单:在有效架构中只需将 arm64 替换为 x86_64

在我的项目中有类似的问题和以下三个警告:

我的有效架构最初是

替换:

armv7 和 i386, 带有 i386 的 armv7s, 以及带有 x86_64 的 arm64

(如警告中所述)是我的解决方案。 有效架构设置的结果是:

替换后我上面的三个警告消失了。

可以在此处找到有关架构的更多深入信息: https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/

我认为这个警告在 Xcode 中的表述有点混乱。

【讨论】:

【参考方案9】:

如果您在 Flutter 中遇到问题:

    删除 播客文件, Podfile.lock, 豆荚文件夹, Runner.xcworkspace、Flutter.framework。

    运行flutter clean

    运行flutter build ios

【讨论】:

【参考方案10】:

我发现解决此问题的最简单方法是在我的文本编辑器中打开项目,然后查找并删除所有 VALID_ARCHS 行。

【讨论】:

【参考方案11】:

我也面临同样的问题。为了解决问题,我刚刚将构建系统从 Standard 更改为 Legacy,从而解决了问题。

【讨论】:

【参考方案12】:

我在构建框架时看到了同样的警告。 一段时间后注意到这些有效的架构值会根据设备类型而有所不同,而不管构建设置中的值如何。

Real devices-> arm64 
Simulator devices ->x86-64

【讨论】:

以上是关于警告“将架构 arm64 映射到 x86_64”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

IOS警告消除

SAS这个警告问题怎么解决

clang消除警告

keil警告怎么办?

C4250 VC++ 警告是啥意思?

这个安全警告是啥意思(.Net Process 类)?