对某些库使用-all_load,但对某些库不使用

问题描述:

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

苹果Mach-O的连接错误 64重复的符号体系结构armv7s

什么是造成这种情况的解决方案?

+1

如果您尝试将AdMob v6.2添加到您的项目中,请阅读以下内容:http://googleadsdeveloper.blogspot.com/2012/09/migrating-to-admob-v62-for-ios.html 帮助我昨天。 – krafter

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

不要尝试运行没有加载标志的代码。该标志的原因是处理Apple链接器问题,其中ObjectiveC库中的类别未得到正确处理。 尝试切换到这一点:

-force_load $(BUILD_PRODUCTS_DIR)/libfoo.a 

编辑:我看过,但没有证实为4.6的Xcode这不再是必要的。

David H的回答基本上是正确的,但在代码示例中有两个拼写错误。链接器的参数应该是一个需要特殊的加载行为库如下:

-force_load $(BUILT_PRODUCTS_DIR)/libfoo.a 

注:我也遇到过类似的情况在我的项目(使用的Xcode 4.6.1),但应用程序仍不会链接时既不指定-all_load也不指定-force_load(针对iOS5和iOS6)。

+0

其他的一定是错误的,因为你不应该得到链接器错误。这两个标志都指示运行时在应用程序启动时采取一些操作。无论是否使用应用程序,All_load都会强制加载库中的每个链接。 force_load标志让你只加载一个库。然而,即使认为它会链接,它会崩溃,因为类别从未加载。 –

+0

就我而言,我使用Apptentive和AdMob。 Apptentive需要启用“-all_load”,AdMob要求它关闭。在我的情况下唯一的解决方案是将'-force_load/path/to/libApptentiveConnect.a'添加到链接器标志。这是Xcode 4.6.1。所有其他选项不会链接。 –

+0

您应该从Apptentive请求一个选择性的force_load指令。告诉你使用all_load是荒谬的。你正在使用-ObjC标志,对吗? http://*.com/a/6630019/1633251 –