尝试使用2个第三方库时重复符号

时间:2013-11-30 10:04:25

标签: ios xcode linker libtool mapbox

我使用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为我提供了.a文件,但是Mapbox的iOS SDK没有.a文件我可以使用。我已经尝试过提取它们并将它们组合成一个库,如How to handle duplicate symbol error from 3rd party libraries?

所示

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

相关问题