Как обрабатывать дублируемую символьную ошибку от сторонних библиотек?

У меня есть две сторонние библиотеки, которые, похоже, используют один и тот же class. Это должно быть хорошо, но я получаю такую ​​ошибку при создании:

ld: duplicate symbol .objc_class_name_CJSONScanner in /Users/myappOne/TapjoyConnect/Frameworks/libTapjoyConnectSimulatorRewardInstall_Ads_Pinch.a(CJSONScanner.o) and /Developer/Projects/BuildOutput/Debug-iphonesimulator/OtherLibrary_d.a(CJSONScanner.o) 

Как я могу справиться с этой проблемой …

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

… если исходные файлы недоступны?

Я предполагаю, что это две сторонние библиотеки, которые предоставили вам только файлы .a, а не исходный код. Вы можете использовать libtool, lipo и ar на терминале для извлечения и рекомбинирования файлов.

Чтобы узнать, какие архитектуры находятся в файле:

 $ lipo -info libTapjoy.a Architectures in the fat file: libTapjoy.a are: armv6 i386 

Затем, чтобы извлечь только armv6, например:

 $ lipo -extract_family armv6 -output libTapjoy-armv6.a libTapjoy.a $ mkdir armv6 $ cd armv6 $ ar -x ../libTapjoy-armv6.a 

Затем вы можете извлечь одну и ту же архитектуру из другой библиотеки в один и тот же каталог, а затем перекомпилировать их так:

 $ libtool -static -o ../lib-armv6.a *.o 

И наконец, после того, как вы сделали это с каждой архитектурой, вы можете снова объединить их с липо:

 $ cd .. $ lipo -create -output lib.a lib-armv6.a lib-i386.a 

Это должно избавиться от любых повторяющихся символов, но также объединить две библиотеки в одну. Если вы хотите сохранить их отдельно или просто удалить дубликат из одной библиотеки, вы можете соответствующим образом изменить процесс.

Ответ Кори Килгера – это правильный путь … просто небольшая настройка, так как у меня нет репутации для комментариев.

В моей системе Mac OS 10.8 эта команда lipo – это та, которую я использовал для создания файлов .a для использования с ar:

 lipo -thin armv6 -output libTapjoy-armv6.a libTabjoy.a 

Страница man для lipo говорит -extract и -extract_family, которые производят универсальные .a-файлы, и моя команда ar не будет извлекать ничего из них.

Если у вас есть источники для обеих статических библиотек, постройте один из них без classа CJSONScanner. Если вы этого не сделаете, вы можете использовать «ar» из командной строки, чтобы извлечь CJSONScanner.o из одной из библиотек.

Вероятно, есть какой-то волшебный флаг, который вы можете передать «ld», чтобы исправить это, но я не знаю этого.

  • Как использовать метод prepareForReuse
  • Есть ли способ удалить разделительную линию из UITableView?
  • Сохранение изображения в plist
  • Как прокрутить UITableView в определенную позицию
  • Возвратитесь к поведению приложения после разговора по телефону в собственном коде, чем UIWebView
  • Как использовать UIPanGestureRecognizer для перемещения объекта? iPhone / IPad
  • Создание пользовательского UIKeyBoard для iPhone
  • Лучшая библиотека Cocoa / Objective-C Wrapper для SQLite на iPhone
  • Аккордеонная ячейка таблицы - Как динамически расширять / сокращать uitableviewcell?
  • NSMutableArray - заставить массив удерживать только определенный тип объекта
  • создать подclass uibutton
  • Давайте будем гением компьютера.