【问题标题】:Duplicate Symbols when trying to use 2 third party libraries尝试使用 2 个第三方库时出现重复符号
【发布时间】:2013-11-30 10:04:24
【问题描述】:

我将 MapBox 用于我的 Map SDK 并使用 Maply(WhirlyGlobeMaplyComponent) 在我的应用程序上显示地球。单独他们工作得很好,但他们似乎不能很好地一起工作。

问题在于,这两个库在下面使用相同的类(没有前缀)并导致链接器问题,表明我的应用程序中有重复的符号。下面给出了链接器错误的示例(我收到多个此类错误)

duplicate symbol _pj_s_eqdc in:
/Users/SagarAdmin/Desktop/Motr-iOS/Motr/WhirlyGlobeMaplyComponent.framework/WhirlyGlobeMaplyComponent(PJ_eqdc.o)
/Users/SagarAdmin/Desktop/Motr-iOS/Motr/MapBox.framework/MapBox(PJ_eqdc.o)

虽然 Maply 为我提供了带有 Mapbox 的 iOS SDK 的库的 .a 文件,但我没有可以使用的 .a 文件。我已经尝试提取这些并将它们组合到一个库中,如How to handle duplicate symbol error from 3rd party libraries? 所示

但我不确定这是否是这两个库的正确解决方案。关于如何在我的项目中成功使用这两个框架的任何解决方法?

【问题讨论】:

    标签: ios xcode linker libtool mapbox


    【解决方案1】:

    如果库确实相同,您应该只链接一次库。在这种情况下,只需选择两者之一,然后从目标项目设置中的“链接框架和库”列表中删除另一个。这应该可以解决“重复符号”问题。

    但是,如果这是两个不同的库(但使用相同的类名),则无法通过合并/组合库来解决此问题。您只能通过更改原始代码来解决它,使所有类名和常量等唯一。

    【讨论】:

      【解决方案2】:

      问题是这两个库都使用 Proj4 投影库,但在其他方面不重叠代码。有一个类似的问题documented here,解决方法是在 MapBox 版本中重命名一个函数。这可以适用于任何一个版本,但这是 Objective-C 没有命名空间的一个非常常见的副作用。

      【讨论】:

      • 从线程看来,MapBox 在其 SDK 中包含了对重复符号的修复。如何通过此修复访问 .framework 文件?
      • 这在项目的主分支中没有发生,也没有包含在.framework 版本中。最好使用 CocoaPods 或来源 install methods 并自己进行类似的更改。
      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多