重复符号错误:带有 Objective-Zip、ZLib、MiniZip 的 Flurry SDK 5.0.0

Posted

技术标签:

【中文标题】重复符号错误:带有 Objective-Zip、ZLib、MiniZip 的 Flurry SDK 5.0.0【英文标题】:Duplicate symbol Error : Flurry SDK 5.0.0 with Objective-Zip, ZLib, MiniZip 【发布时间】:2014-04-30 22:53:28 【问题描述】:

Objective-ZipZLibMiniZip 使用 Flurry 5.0.0 编译失败并出现 34 duplicate symbols for architecture i386

报告了重复的符号 _zipOpen , _unztell, _unzSetOffset, _unzClose

Flurry 4.3.2 用于XCode 5.0 时,相同的项目编译良好 有人遇到过这个问题吗?有什么办法吗?

【问题讨论】:

【参考方案1】:

我遇到了这个问题,因为 FlurryAds 5.0.0 在内部使用 ZipArchive,但我们也在自己的应用程序中使用 ZipArchive(通过 Cocoapods)。这可能是由于使用了 Flurry 使用的任何与 zip 相关的库。

如果您在应用中的任何位置使用 ZipArchive 及其依赖项,则会出现冲突,因为您的 ZipArchive 副本和 FlurryAds 的 ZipArchives 副本都定义了相同的符号。

这是一个 Objective-C 的问题,因为 Objective-C 不支持命名空间,这会让两个副本一起存在。

你也可以责怪 Flurry,因为他们在分发二进制库时没有为其依赖项添加前缀(即 FlurryZipArchive,前缀是命名空间的替代方法)。

目前不完美的解决方案是从目标中删除ZipArchive.mioapi.cmztools.cunzip.czip.c

您仍然可以导入 ZipArchive.h 并使用它,但这有点危险,因为我们不知道 ZipArchive FlurryAds 正在使用哪个版本(或者他们是否可能已对其进行了修改),因此我们无法确定我们的头文件与它们在库中定义的符号兼容。

可能没问题,Flurry 可能正在使用最新版本并且没有修改它。

但是,我们应该要求 Flurry 使 ZipArchive 成为显式的外部依赖项(这样我们就可以共享一个安装和 ZipArchive 的一个标头),或者为 ZipArchive 添加前缀,这样它就不会影响其他依赖项。

【讨论】:

您也可以从链接器标志中删除“-ObjC”以避免冲突,但毫无疑问,您有充分的理由将其放在那里。这个 SO 答案涵盖了 -ObjC 标志的替代方案:***.com/questions/11254269/…。如果 Flurry 可以为库添加前缀,那么实现通常会更容易。 Flurry 已经确认前缀没有进入 5.2,但应该在 5.3 中,所以这个问题应该会消失【参考方案2】:

您需要添加另一个框架。您需要在新的 Flurry 5.0.0 中添加一个额外内容。它是关于以下框架:

libz.dylib

编辑:

尝试从构建过程中排除这些文件:ioapi.c/.h mztools.c/.h unzip.c/.h zip.c/.h ZipArchive.mm/.h crypt.h

祝你好运!

【讨论】:

'libz.dylib' 已经存在。这是“重复符号”错误。您的解决方案将适用于“未找到符号”错误。 @danfelabs 添加了 Flurry 自己的另一个解决方案。使用新 SDK 时出错。【参考方案3】:

我遇到了同样的问题。

重命名 unzip.h 和 unzip.m(对于 MiniZip) - 对我有帮助。

【讨论】:

【参考方案4】:

我在不使用Flurry 的情况下遇到了同样的问题。我使用 cocoapods 并添加了 ZipArchiveobjective-zip 库作为依赖项。我的项目build settings:-all_loadOther-Linker-Flags 有超额价值。

我的目标在其Other Linker Flags 中只有$(inherited) 值,因此-all_load 标志是从项目设置中隐式添加的。这就是那些链接器错误的原因

【讨论】:

以上是关于重复符号错误:带有 Objective-Zip、ZLib、MiniZip 的 Flurry SDK 5.0.0的主要内容,如果未能解决你的问题,请参考以下文章

为啥 XCode 会抛出重复的符号错误?

从 C++ 连接 MySQL:错误 LNK2001:未解析的外部符号 [重复]

链接器错误VS 2013 [重复]

带有重音符号的Python转储json [重复]

如何在带有 £ 符号的数字列上为 SQL 查询添加前缀 [重复]

数值积分中的符号错误,可能存在精度问题