对某些库使用 -all_load 但对某些库不使用
Posted
技术标签:
【中文标题】对某些库使用 -all_load 但对某些库不使用【英文标题】:Using -all_load for some libraries but not for some libraries 【发布时间】:2012-10-01 07:18:19 【问题描述】:我用于我的应用程序的组件之一要求我使用 -all_load 作为其链接器标志之一。但是当我添加这个标志时,我从我在我的应用程序中使用的另一个库中得到一个错误。当我归档应用程序时,我收到以下错误:
Apple Mach-O 链接器错误 架构 armv7s 的 64 个重复符号
这种情况有什么解决办法?
【问题讨论】:
如果您尝试将 AdMob v6.2 添加到您的项目中,请阅读:googleadsdeveloper.blogspot.com/2012/09/…,昨天对我有帮助。 【参考方案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 标志,对吗? ***.com/a/6630019/1633251以上是关于对某些库使用 -all_load 但对某些库不使用的主要内容,如果未能解决你的问题,请参考以下文章
SAS安装失败打不开,提示逻辑库不存在和无法初始化选项子系统,无法初始化SAS内核,这是啥情况?