Конфликт между статическими библиотеками, используемыми в проекте XCode - PullRequest
3 голосов
/ 17 ноября 2011

Я использую RestKit, GData и Facebook API. Все они имеют файлы JSON, многие из них имеют одинаковые имена, перечисления и т. Д. Когда я компилирую, я получаю сообщение об ошибке дубликатов.

Как я могу предотвратить конфликты?

Спасибо Шани

Ответы [ 2 ]

2 голосов
/ 26 июля 2012

Я столкнулся с этой проблемой, потому что новый Facebook SDK 3.0 теперь является статической структурой, которая также включает SBJSON, у меня также есть другая статическая структура, которая также включает в себя тот же класс. Первоначально я просто заходил и редактировал исходные файлы Facebook SDK и применял пользовательский префикс к классам SBJSON. Это больше не работает.

Я начал очень расстраиваться и начал мыслить нестандартно, вот решение, которое я нашел.

  1. Перейдите к FacebookSDK.framework-> Версии-> Текущая
  2. Откройте скомпилированный файл библиотеки FacebookSDK с лучшей IDE, textedit подойдет!
  3. Поиск с учетом регистра и заменить все вхождения "SBJson" на "FBJson"
  4. Поиск с учетом регистра и замена всех вхождений "SBJSON" на "FBJSON"
  5. Сохраните, очистите, скомпилируйте, все готово!

Кто знал, что это сработает?

Примечание: некоторые скажут, почему заменить на FBJson, а не FBSBJson? Я решил, что было бы лучше сохранить его одинаковой длины символов, чтобы быть в безопасности. Примечание. Если вы пытаетесь сделать это с другими платформами, обязательно найдите в заголовочных файлах любые ссылки на конфликтующий класс, который вы переименовываете. В этом случае переименованный класс не упоминался ни в одном из заголовочных файлов. Если бы это было так, я бы обязательно переименовал его в заголовочных файлах.

2 голосов
/ 22 ноября 2011

Это моя лучшая догадка.Было бы полезно опубликовать ошибки, которые вы получаете при компиляции.

Если вы используете флаг компоновщика -all_load, отключите его.Если ваши библиотеки требуют, чтобы вы использовали эту опцию, попробуйте использовать опцию -force_load для определенных библиотек, которые в ней нуждаются.В крайнем случае, соберите библиотеки из исходного кода, переименовывая встречные символы.

Приведенный ниже вопрос может дать более глубокое понимание проблем all_load:

Objective-Cкатегории в статической библиотеке

...