Ошибка повторяющегося символа: Flurry SDK 5.0.0 с Objective-Zip, ZLib, MiniZip

Objective-Zip, ZLib а также MiniZip сборник с Flurry 5.0.0 не удается с 34 duplicate symbols for architecture i386,

Двойной символ сообщается для _zipOpen , _unztell, _unzSetOffset, _unzClose и т.п.

Тот же проект компилируется нормально, когда Flurry 4.3.2 используется на XCode 5.0Кто-нибудь сталкивался с этой проблемой? Любое исправление?

4 ответа

У меня была эта проблема, потому что FlurryAds 5.0.0 использует ZipArchive для внутреннего использования, но мы также используем ZipArchive (через Cocoapods) в нашем собственном приложении. Это может быть вызвано использованием любой из тех же библиотек, связанных с zip, которые использует Flurry.

Если вы используете ZipArchive и его зависимости где-либо в вашем приложении, возникает конфликт, потому что ваша копия ZipArchive и копия ZipArchives FlurryAds определяют одни и те же символы.

Это проблема Objective-C, потому что Objective-C не поддерживает пространство имен, что позволило бы двум копиям жить вместе.

Вы также можете обвинить Flurry, потому что они распространяют двоичную библиотеку без префикса своих зависимостей (т.е. FlurryZipArchiveпрефикс будет альтернативой пространству имен).

Несовершенное решение на данный момент заключается в удалении ZipArchive.m, ioapi.c, mztools.c, unzip.c, а также zip.c от вашей цели.

Вы все еще можете импортировать ZipArchive.h и использовать его, но это несколько опасно, потому что мы не знаем, какую версию ZipArchive FlurryAds использует (или могли ли они ее изменить), поэтому мы не можем быть уверены, что наш заголовочный файл совместим с символами, которыми они являются определение в библиотеке.

Это, вероятно, хорошо, Flurry, вероятно, использует последнюю версию и не изменял ее.

Однако нам следует попросить Flurry либо сделать ZipArchive явной внешней зависимостью (чтобы мы могли совместно использовать одну установку и один заголовок для ZipArchive), либо добавить префикс ZipArchive, чтобы он не влиял на другие зависимости.

Вам нужно добавить еще один фреймворк. В новой версии Flurry 5.0.0 есть еще один, который вам нужно добавить. Речь идет о следующей структуре:

libz.dylib

РЕДАКТИРОВАТЬ:

Попробуйте исключить эти файлы из процесса сборки: ioapi.c/.h mztools.c/.h unzip.c/.h zip.c/.h ZipArchive.mm/.h crypt.h

Удачи!

У меня такая же проблема.

Переименуйте unzip.h и unzip.m (для MiniZip) - помогло мне.

У меня была такая же проблема без использования Flurry, Я использовал cocoapods и добавил оба ZipArchive а также objective-zip библиотеки как зависимости. У меня была лишняя ценность в моем Other-Linker-Flags моего проекта build settings:-all_load,

Моя цель была только $(inherited) значение в его Other Linker Flags, Итак -all_load Флаг был добавлен неявно из настроек проекта. Это было причиной тех ошибок компоновщика

Другие вопросы по тегам