63

In the new XCode 5.1, arm64 has become among the standard architectures to build for.

However, in current projects of mine I included libraries (Google AdMob for example) that do not yet support this new architecture - these are now causing linker errors:

ld: symbol(s) not found for architecture arm64

Google AdMob 6.8.0 for example is said to be supporting arm64 but I can't really confirm this, unless cputype (16777228) cpusubtype (0) is arm64? (found through the file command-line tool)

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

Is there a way to go about this?

4

6 回答 6

109

暂时摆脱arm64并不难。您需要做的就是:

  • 编辑您的目标构建设置Architectures通过打开下拉列表更改值,单击Other...并选择它,删除具有值的行$(ARCHS_STANDARD)并添加具有值的两行:armv7并且armv7s(或$(ARCHS_STANDARD_32_BIT)nschum 所述),关闭弹出窗口。

  • 编辑该值Valid Architectures并简单地删除arm64它的一部分。

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

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

祝你好运

于 2014-03-13T05:53:08.870 回答
19

从 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 位。

但在任何一种情况下,在您的目标构建设置下,您都需要确保 Achitectures 和 Valid Achitectures 设置相同并且它们匹配(见下图)。因此,您可以使用 $(ARCHS_STANDARD) 来尝试它们,如果它无法编译,那么您可以使用 $(ARCHS_STANDARD_32_BIT) 来尝试它们,理论上这将消除错误并编译一个工作项目。

-

对于带有 arm64 armv7s 和 armv7 的 64 位,就像这样:

在此处输入图像描述

-

或者对于 32 位只有 armv7s 和 armv7(没有 arm64):

在此处输入图像描述

于 2014-03-22T16:54:45.693 回答
6

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

如果您使用的是 Cocoapods,请务必为 Pods 项目中的所有目标更改此设置,并将所有这些目标的“仅构建活动架构”设置为所有方案的“否”。

此处详细介绍了对您的 podfile 进行的小改动,以从您的 cocoapods 目标中自动删除 64 位构建架构:http: //cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from-cocoapods-targets

于 2014-03-13T04:26:16.857 回答
5

在 XCode 5.1上将架构设置为$(ARCHS_STANDARD_32_BIT)是可行的。无需从有效架构中删除arm64 。

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

于 2014-04-25T07:25:48.837 回答
1

没有一个答案对我有用。
我终于提交了我的应用程序安装旧的Xcode 5.0.2除了 Xcode 5.1
使用这个版本的 Xcode 来存档应用程序没有错误。在此处

下载旧版本的Xcode 5.0.2 (您必须使用您的 Apple ID 登录):

于 2014-03-22T15:14:59.647 回答
1

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

因此,没有必要禁用 arm64 架构。

于 2014-03-15T18:22:40.657 回答