【问题标题】:-ObjC linker flag causes duplicate symbol errors-ObjC 链接器标志导致重复符号错误
【发布时间】:2013-07-29 15:43:30
【问题描述】:

我需要在 Xcode 的“其他链接器标志”中包含 -ObjC 标志才能使用第 3 方组件。然而,一旦我添加了这个标志,我就会得到一堆看起来像这样的错误:

    duplicate symbol _OBJC_IVAR_$_GAI.defaultTracker_ in:
        /MyApp/GoogleAnalytics/libGoogleAnalytics.a(GAI.o)
        /MyApp/GoogleAnalytics/libGoogleAnalytics_debug.a(GAI.o)
    duplicate symbol _OBJC_IVAR_$_GAI.dispatcher_ in:
        /MyApp/GoogleAnalytics/libGoogleAnalytics.a(GAI.o)
        /MyApp/GoogleAnalytics/libGoogleAnalytics_debug.a(GAI.o)
...
    duplicate symbol _OBJC_CLASS_$_GAIDispatcher in:
        /MyApp/GoogleAnalytics/libGoogleAnalytics.a(GAIDispatcher.o)
        /MyApp/GoogleAnalytics/libGoogleAnalytics_debug.a(GAIDispatcher.o)
    duplicate symbol _OBJC_METACLASS_$_GAIDispatcher in:
        /MyApp/GoogleAnalytics/libGoogleAnalytics.a(GAIDispatcher.o)
        /MyApp/GoogleAnalytics/libGoogleAnalytics_debug.a(GAIDispatcher.o)
    ld: 212 duplicate symbols for architecture armv7s

同样,如果我不使用 -ObjC 标志,这一切都会消失。它似乎与 Google Analytics 库有关。我该如何解决这个问题?

【问题讨论】:

  • 好像你已经包含了both谷歌分析库的调试版和普通版
  • 是的,但显然需要调试库进行调试。当我不使用 -ObjC 标志时,我不会收到这些错误。

标签: ios objective-c xcode compiler-errors static-libraries


【解决方案1】:

编辑构建目标的发布和调试配置。在调试配置中包含库的调试版本,以及发布目标的非调试版本。不要将两者都包含在同一个配置中——这就是你得到重复符号的原因。

从您的构建目标中删除这两个库,例如:

然后在构建目标的设置中搜索“其他链接器标志”,并为调试配置添加“-lGoogleAnalytics_debug”,为发布配置添加“-lGoogleAnalytics”,例如:

【讨论】:

  • 如何将 libGoogleAnalytics_debug.a 设置为仅包含在调试配置中?
  • 我认为有一个构建设置来控制库变体......(但可能只适用于动态加载的库)
  • 您可以尝试从库构建阶段删除库,然后使用“其他链接器标志”(OTHER_LDFLAGS) 设置链接到正确的 libGoogleAnalytics
  • 哈!我刚刚完成了建议。无论如何,我已经为你 +1 了。
  • 感谢您的详细编辑。现在工作。一个问题 - 为什么是“-lGoogleAnalytics_debug”而不是“-libGoogleAnalytics_debug”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
相关资源
最近更新 更多