xcode 5.1中的Arm64架构

hxzsmxv2  于 2022-12-27  发布在  其他
关注(0)|答案(6)|浏览(304)

在新的XCode 5.1中,arm 64已经成为构建的标准架构之一。
然而,在我目前的项目中,我包含了一些库(例如Google AdMob),它们还不支持这种新的架构--这些库现在会导致链接器错误:

ld: symbol(s) not found for architecture arm64

例如,Google AdMob 6.8.0是said to be supporting arm64,但我无法真正确认这一点,除非cputype (16777228) cpusubtype (0)是arm 64?(通过文件命令行工具找到)

libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures
libGoogleAdMobAds.a (for architecture armv7):   current ar archive random library
libGoogleAdMobAds.a (for architecture armv7s):  current ar archive random library
libGoogleAdMobAds.a (for architecture i386):    current ar archive random library
libGoogleAdMobAds.a (for architecture x86_64):  current ar archive random library
libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)):   current ar archive random library

有办法解决这个问题吗?

cmssoen2

cmssoen21#

暂时摆脱arm 64并不难,您需要做的只是:

  • 编辑您的目标生成设置。打开下拉列表更改**Architectures的值,单击其他...并选择它,删除值为$(ARCHS_STANDARD)的行并添加两个值为:armv7armv7s(或@nschum提到的$(ARCHS_STANDARD_32_BIT)**),关闭弹出窗口。
  • 编辑值**Valid Architectures,只需删除其中的arm64**部分即可。
  • 为工作区或项目中可能存在的每个嵌套项目执行此操作。
    **注意:**这不是解决方案,只是缓解当前问题的几个步骤,请继续关注您的依赖项项目,以了解它们何时与arm 64兼容,并尽快恢复这些设置的更改。
xiozqbni

xiozqbni2#

从Xcode 5.1开始,$(ARHS_STANDARD)现在包含arm 64(以及armv7和armv 7s),而在Xcode 5.02中,$(ARHS_STANDARD)只包含armv7和armv 7s。

适用于Xcode 5.1
$(ARHS_标准)=臂v7臂v7臂64
$(ARCS标准32位)=手臂v7手臂v7

所以如果你必须用64位编译,那么你需要确保所有包含的库都有64位切片。如果它们还不支持64位,那么你将不得不用32位编译。
但是在任何一种情况下,在你的目标构建设置下,你都需要确保架构和有效架构设置相同并且匹配(见下图)。所以你可以用$(ARCHS_STANDARD)来尝试它们,如果它不能编译,你可以用$(ARCHS_STANDARD_32_BIT)来尝试它们,这在理论上会删 debugging 误并编译一个工作的项目。

对于使用arm 64、armv 7s和armv7的64位,如下所示:

对于仅带armv 7s和armv7(不带arm 64)的32位,也可以这样做:

taor4pac

taor4pac3#

在目标的生成设置中,将“有效体系结构”更改为仅支持的体系结构;在这种情况下可能是ARMV7和ARMV7。
如果您正在使用Cocoapods,请确保为Pods项目中的所有目标更改此设置,并为所有方案将所有目标的“Build Active Architecture Only”设置为“No”。
这里详细介绍了对您的podfile进行的一个小更改,以自动从cocopods目标中删除64位构建架构:http://cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from-cocoapods-targets

t1rydlwq

t1rydlwq4#

在XCode 5.1上将架构设置为**$(ARCHS_STANDARD_32_BIT)有效。无需从有效架构中删除arm 64**。
架构指定了实际的架构,并忽略了有效架构中的arm 64条目(它指定了超集)。

wqnecbli

wqnecbli5#

我遇到了同样的错误。下载新版本的Google AdMob SDK 6.8.0解决了这个问题。下面是链接:https://developers.google.com/mobile-ads-sdk/download#downloadios
因此,无需禁用arm64架构。

55ooxyrt

55ooxyrt6#

没有一个答案对我有用

我终于提交了我的应用程序安装旧Xcode 5.0.2除了与Xcode 5.1
使用此版本的Xcode存档应用程序,未出现错误。
下载旧版本的Xcode 5.0.2here(您必须使用Apple ID登录):

相关问题