2

Objective-Zip,编译失败ZLib,.MiniZipFlurry 5.0.034 duplicate symbols for architecture i386

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

Flurry 4.3.2相同的项目在XCode 5.0 任何人都面临这个问题时编译得很好?有什么修复吗?

4

4 回答 4

2

我遇到了这个问题,因为 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 添加前缀,这样它就不会影响其他依赖项。

于 2014-06-11T09:31:53.807 回答
1

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

libz.dylib

编辑:

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

祝你好运!

于 2014-05-13T18:05:03.337 回答
0

我有同样的问题。

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

于 2014-05-16T16:49:31.513 回答
0

我有同样的问题,但没有使用Flurry. 我正在使用cocoapods并添加ZipArchiveobjective-zip库作为依赖项。我Other-Linker-Flags的项目中有超额价值build settings-all_load

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

于 2015-10-19T11:54:44.117 回答