У меня есть две сторонних библиотеки, которые, кажется, используют тот же класс. Это должно быть прекрасным, но я получаю этот тип ошибки при создании:
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)
Как я могу обработать эту проблему...
- РЕДАКТИРОВАНИЕ-
... если исходные файлы не доступны?
Если у вас есть исходные ресурсы для обеих статических библиотек, создайте одну из них без класса CJSONScanner. Если вы этого не сделали, вы можете использовать "ar" из командной строки для извлечения CJSONScanner.o из одной из библиотек.
Вероятно, есть какой-то волшебный флаг, который вы можете передать «ld», чтобы исправить это, но я не знаю этого с рук.
Я предполагаю, что это две сторонние библиотеки, которые предоставили вам только файлы .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
Это должно избавить от любых повторяющихся символов, но также объединит две библиотеки в одну. Если вы хотите сохранить их отдельно или просто удалить дубликат из одной библиотеки, вы можете соответствующим образом изменить процесс.