【问题标题】:Conditional compiling for armv6 and armv7armv6 和 armv7 的条件编译
【发布时间】:2012-03-24 23:03:52
【问题描述】:

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

提前致谢

【问题讨论】:

  • 您可能想用 iOS 和 xcode 标记您的问题。与在 ARM 汇编中滚动您自己的体系结构相关调度程序相比,更多的是关于如何使用此工具链生成通用二进制文件的问题。

标签: ios xcode compiler-errors armv7 armv6


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我从 Apple 收到了这个答复:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 谢谢!但我不明白“从正常的库列表中删除库”在哪里/是什么,我用+ 更改了“库搜索路径”和“其他链接器标志”,我用 armv6 和 armv7 创建了两行。但是现在我有新的错误,详细信息说“..not found l(lib).a”..something is call the Lib..我删除了代码中的所有证据,并且在构建阶段部分也“可选”了......所以可能我需要像你说的那样在“正常列表”中删除它。
      • 我给了你两个选择。您不应该同时尝试两者。
      【解决方案4】:

      抱歉,我从剪贴板粘贴了错误的内容。

      我的意思是:

      只需从 Target Aguilar 设置中的 Valid Architectures 中删除不良架构即可:)

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2012-08-01
            • 2011-02-17
            • 2012-03-01
            • 2018-07-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多