在xcode 5.1的Arm64架构

在新的XCode 5.1中,arm64已经成为构build的标准架构之一。

然而,在我目前的项目中,我包括了不支持这种新体系结构的图书馆(例如Google AdMob) – 这些现在导致链接器错误:

ld: symbol(s) not found for architecture arm64 

谷歌AdMob 6.8.0例如据说是支持arm64,但我不能确认这一点,除非cputype (16777228) cpusubtype (0)是arm64? (通过文件命令行工具find)

 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 

有没有办法去解决这个问题?

暂时摆脱arm64并不难。 所有你需要做的是:

  • 编辑您的目标生成设置 。 通过打开下拉列表来更改Architectures的值,单击Other …并select它,删除值为$(ARCHS_STANDARD)行,并添加两行值为: armv7armv7s (或$(ARCHS_STANDARD_32_BIT)nschum所述 ),closurespopup。

  • 编辑值Valid Architectures ,只需删除它的arm64部分。

  • 为您的工作区或项目中可能存在的每个嵌套项目执行此操作。

注意:这不是一个解决scheme,只是缓解当前问题的几个步骤,请继续关注您的依赖项目,以了解它们何时与arm64兼容,并尽快恢复这些设置的更改。

祝你好运

从Xcode 5.1开始($ ARCHS_STANDARD)现在包括arm64(以及armv7和armv7s),而Xcode 5.02 $(ARCHS_STANDARD)只包含armv7和armv7s。

对于Xcode 5.1

$(ARCHS_STANDARD)= armv7 armv7s arm64

$(ARCHS_STANDARD_32_BIT)= armv7 armv7s

所以,如果你必须编译64位,那么你需要确保所有包含的库都有64位片。 如果他们还不支持64位,那么你将不得不在32位编译。

但是在任何一种情况下,在您的目标构build设置下,您都需要确保Achitectures和Valid Achitectures都设置相同并且相匹配(请参阅下面的图片)。 所以你可以用$(ARCHS_STANDARD)试试它们,如果它不能编译,那么你可以用$(ARCHS_STANDARD_32_BIT)来尝试它们,理论上它将删除错误并编译一个工作项目。

像这样的64位arm64 armv7s和armv7:

在这里输入图像描述

或者像32位armv7和armv7(没有arm64)一样:

在这里输入图像描述

在目标的“生成设置”中,将“有效架构”更改为仅支持您的那些; 在这种情况下可能是armv7和armv7s。

如果您正在使用Cocoapods,请务必对Pods项目中的所有目标进行更改,并将所有这些目标的“Build Active Architecture Only”设置为“No”。

对podfile进行一些小改动,以便从cocoapods目标中自动删除64位构build体系结构,这里详细介绍: http : //cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from-cocoapods-targets

在XCode 5.1 上将体系结构设置为$(ARCHS_STANDARD_32_BIT) 。 无需从有效的体系结构中删除arm64

体系结构指定了要构build的实际体系结构,并将忽略有效体系结构(指定超集)中的arm64条目。 希望苹果很快就能解决这个问题。

我有同样的错误。 下载新版Google AdMob SDK 6.8.0解决了这个问题。 这里是链接: https : //developers.google.com/mobile-ads-sdk/download#downloadios

所以,禁用arm64架构是没有必要的。

没有答案为我工作。
我终于提交了我的应用程序安装旧的Xcode 5.0.2除了Xcode 5.1
使用这个版本的Xcode存档应用程序没有错误。

在这里下载旧版本的Xcode 5.0.2 (您必须使用Apple IDlogin):