【问题标题】:Using -all_load for some libraries but not for some libraries对某些库使用 -all_load 但对某些库不使用
【发布时间】:2012-10-01 07:18:19
【问题描述】:

我用于我的应用程序的组件之一要求我使用 -all_load 作为其链接器标志之一。但是当我添加这个标志时,我从我在我的应用程序中使用的另一个库中得到一个错误。当我归档应用程序时,我收到以下错误:

Apple Mach-O 链接器错误 架构 armv7s 的 64 个重复符号

这种情况有什么解决办法?

【问题讨论】:

标签: iphone ios ipad admob ios6


【解决方案1】:

只需删除该标志并尝试不使用它。如果仍然不起作用,请尝试对每个库使用 --force-load。

【讨论】:

    【解决方案2】:

    不要尝试在没有加载标志的情况下运行您的代码。该标志的原因是为了处理 Apple 链接器问题,即 ObjectiveC 库中的类别没有得到正确处理。 尝试切换到这个:

    -force_load $(BUILD_PRODUCTS_DIR)/libfoo.a 
    

    编辑:我已阅读但未验证从 Xcode 4.6 开始不再需要。

    【讨论】:

      【解决方案3】:

      David H 的回答基本正确,但代码示例中有两个错别字。对于需要特殊加载行为的库,链接器参数应如下所示:

      -force_load $(BUILT_PRODUCTS_DIR)/libfoo.a 
      

      注意:我在我的项目中遇到过类似的情况(使用 Xcode 4.6.1),但是当既没有指定 -all_load 也没有指定 -force_load 时(针对 iOS5 和 iOS6),应用程序仍然无法链接。

      【讨论】:

      • 肯定有其他问题,因为您不应该得到链接器错误。这两个标志都告诉运行时在应用程序启动时采取一些行动。 All_load 强制加载库中的每个链接,无论它是否被应用程序使用。 force_load 标志只允许您加载单个库。但是,即使它会链接,它也会崩溃,因为从未加载过类别。
      • 就我而言,我同时使用 Apptentive 和 AdMob。 Apptentive 需要 -all_load 开启,AdMob 需要关闭。在我的情况下唯一可行的解​​决方案是将-force_load /path/to/libApptentiveConnect.a 添加到链接器标志。这是 Xcode 4.6.1。所有其他选项都不会链接。
      • 您应该向 Apptentive 请求选择性的 force_load 指令。告诉你使用 all_load 是荒谬的。您正在使用 -ObjC 标志,对吗? stackoverflow.com/a/6630019/1633251
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多