对某些库使用-all_load,但对某些库不使用
我为我的应用程序使用的一个组件要求使用-all_load作为其链接程序标志之一。但是,当我添加此标志时,我从我的应用程序中使用的另一个库中收到错误。当我归档应用程序,我得到以下错误:对某些库使用-all_load,但对某些库不使用
苹果Mach-O的连接错误 64重复的符号体系结构armv7s
什么是造成这种情况的解决方案?
只要删除该标志,并尝试没有它。如果仍然不起作用,请尝试使用每个库的--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)。
其他的一定是错误的,因为你不应该得到链接器错误。这两个标志都指示运行时在应用程序启动时采取一些操作。无论是否使用应用程序,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标志,对吗? http://stackoverflow.com/a/6630019/1633251 –
如果您尝试将AdMob v6.2添加到您的项目中,请阅读以下内容:http://googleadsdeveloper.blogspot.com/2012/09/migrating-to-admob-v62-for-ios.html 帮助我昨天。 – krafter