针对 armv6 和 armv7 的条件编译



我有一个同时支持 amrv6 和 armv7 的已发布应用程序。现在我有一个仅与 armv7 兼容的升级(我添加了一个依赖于 armv7 的外部库(。当我尝试将应用程序提交到商店时,我收到错误详述

我了解以前的错误,我需要更改我的应用程序,以便它支持这两种架构。我的问题是我的代码依赖于仅符合 armv7 的库。如果我更改项目的属性以支持 armv6 和 armv7,则会出现编译错误(详细信息如下(。我需要能够在支持两种架构的情况下编译代码:armv7 使用我依赖的库进行编译armv6 有一个不同的代码,它不依赖于库。

我怎样才能做到这一点?

错误详细信息:

• the compile crash is in one Lib file (.a) and the error says : ld: warning: directory not found for option '-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/gcc/arm-apple-darwin10/4.0.1' ld: in /Users/.../(lib file).a, file is universal but does not contain a(n) armv6 slice for architecture armv6 Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2 failed with exit code 1

提前致谢

好吧,

我意识到我的最后一个答案不正确......苹果说这是不可能的,但这不是真的......多亏了吉姆,我搜索了一点,我找到了一种方法。

  1. "构建阶段">中删除库
  2. "其他链接器标志"(构建设置(中添加这两种架构,为此您需要单击+并添加 armv6 和 armv7
  3. 在 armv7.. 中添加库,并带有-l
  4. 不要忘记代码中的#if defined _ARM_ARCH_7

这就像吉姆的回答,但更详细。

我收到了苹果的这个答案:

不能有条件地为 armv6 或 armv7 构建应用。您的静态库必须同时为 armv6 和 armv7 构建,因为您的应用程序支持这两种架构...可以通过将 iOS 部署目标设置为 4.3 或更高版本来放弃对 armv6 的支持。

基本上,我需要要求库的开发人员为这两种架构(=/(构建,或者我将最小目标设置为4.3并且仅armv7

在生成设置中,如果将鼠标悬停在某个设置上,则会显示一个+,你可以单击该以将设置范围限定为特定体系结构。 您必须从普通的库列表中删除该库,并通过仅为 armv7 手动传递 -L 参数来添加它。 您可能还必须添加预处理器定义,以便可以在调用库的代码周围放置#ifdef

编辑:考虑到这一点,您可以通过在构建阶段部分中将库标记为可选来以更简单的方式执行此操作。

对不起,我从剪贴板粘贴了错误的东西。

我的意思是说:

只需从目标阿吉拉尔设置中的有效架构中删除错误的架构,您就可以:)

我遇到了同样的问题,所以我将:"仅构建激活架构"切换为是(在目标 -> 构建设置中">

这行得通...目前。

我想我的应用程序无法在iPhone 5上运行,但是我必须等到我正在使用的静态库的供应商为armv7/armv7s构建它

我在Google Analytics iOS SDK上遇到了这个问题。仅用最新版本替换库就是为我解决这个问题的原因。

最新更新