在新的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
有办法解决这个问题吗?
6条答案
按热度按时间cmssoen21#
暂时摆脱arm 64并不难,您需要做的只是:
Architectures
的值,单击其他...并选择它,删除值为$(ARCHS_STANDARD)
的行并添加两个值为:armv7
和armv7s
(或@nschum提到的$(ARCHS_STANDARD_32_BIT)
**),关闭弹出窗口。Valid Architectures
,只需删除其中的arm64
**部分即可。**注意:**这不是解决方案,只是缓解当前问题的几个步骤,请继续关注您的依赖项项目,以了解它们何时与arm 64兼容,并尽快恢复这些设置的更改。
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位,也可以这样做:
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
t1rydlwq4#
在XCode 5.1上将架构设置为**$(ARCHS_STANDARD_32_BIT)有效。无需从有效架构中删除arm 64**。
架构指定了实际的架构,并忽略了有效架构中的arm 64条目(它指定了超集)。
wqnecbli5#
我遇到了同样的错误。下载新版本的Google AdMob SDK 6.8.0解决了这个问题。下面是链接:https://developers.google.com/mobile-ads-sdk/download#downloadios
因此,无需禁用arm64架构。
55ooxyrt6#
没有一个答案对我有用
我终于提交了我的应用程序安装旧Xcode 5.0.2除了与Xcode 5.1
使用此版本的Xcode存档应用程序,未出现错误。
下载旧版本的Xcode 5.0.2here(您必须使用Apple ID登录):