单触式库和我使用的第三方库中的重复符号

时间:2013-01-27 10:05:26

标签: ios objective-c xamarin.ios static-libraries

我正在使用Monotouch开发iPhone应用程序。在我的应用程序中,我必须使用第三方提供的静态库。该库用于Xcode并用Objective-C编写。我使用绑定项目模板将其绑定到Monotouch。当我将生成的dll添加到我的项目时,它编译得很好,但是当我使用库中的类时,它无法编译,并出现以下错误:

Duplicate symbol _DeleteCriticalSection

那我该怎么办?有没有办法消除冲突? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我在FAT库中看到类似的东西,其中一些文件被复制,导致重复的对象。您可以尝试查看这是否是同一问题,例如如果您的库名为mystaticlibrary.a

$ nm mystaticlibrary.a | grep DeleteCriticalSection

如果您有一个FAT库(多个架构),现在多次使用该符号是正常的。要查看是否属于这种情况:

$ file mystaticlibrary.a

您应该拥有每个架构的符号。如果您看到更多符号(例如3x DeleteCriticalSection但只有2个拱形符号),那么您会遇到类似的问题。

修复(如果它是同一个问题)是拆分FAT库(lipo工具),然后是每个特定于架构的库,然后重新合并所有内容(拱然后FAT)。

您最好的选择可能是联系您的图书馆供应商,并要求他提供一个固定的库(在构建过程中可能存在错误)。给他们上面的命令输出,他们可能会发现出了什么问题。