在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)
行,并添加两行值为:armv7
和armv7s
(或$(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):