armv6和armv7的条件编译

时间:2012-03-07 12:01:54

标签: ios xcode compiler-errors armv7 armv6

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

我理解上一个错误,我需要更改我的应用程序,以便它支持这两种体系结构。我的问题是我的代码依赖于一个只与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

提前致谢

6 个答案:

答案 0 :(得分:4)

嗯,我意识到我的最后答案不是正确的...... Apple说这是不可能的但这不是真的......感谢Jim,我搜索的更多我发现了一种方法......

  1. “Build Phases”
  2. 中删除lib
  3. “其他链接标记”(构建设置)中添加两种体系结构,因为您需要单击+并添加armv6和armv7
  4. 使用-l
  5. 在armv7 ..中添加lib
  6. 不要忘记代码中的#if defined _ARM_ARCH_7
  7. 这就像吉姆回答但更详细。

答案 1 :(得分:2)

我从Apple收到了这个答案:

  

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

我想说:

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

答案 4 :(得分:0)

我有同样的问题,所以我切换:“Build Activate Architecture Only”为yes(在Target - > Build Settings中)

这适用于......现在。

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

答案 5 :(得分:0)

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