9

我有一个支持 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

提前致谢

4

6 回答 6

4

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

  1. “构建阶段”中删除 lib
  2. 在"Other Linker Flags" (Build Settings)中添加这两种架构,为此您需要单击+并添加 armv6 和 armv7
  3. 在 armv7.. 中添加 lib-l
  4. 不要忘记#if defined _ARM_ARCH_7你的代码

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

于 2012-03-15T10:18:46.973 回答
2

我从 Apple 收到了这个答案:

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

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

于 2012-03-09T11:26:55.940 回答
1

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

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

于 2012-03-07T15:32:16.363 回答
0

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

我的意思是说:

只需从 Target Aguilar 设置中的 Valid Architectures 中删除不良架构,您就可以开始了 :)

于 2012-09-13T02:29:15.410 回答
0

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

这工作......现在。

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

于 2012-09-17T12:42:06.997 回答
0

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

于 2012-12-26T17:09:40.613 回答