Статические библиотеки имеют одинаковые имена функций, что приводит к ошибке дублированного символа - PullRequest
3 голосов
/ 04 августа 2011

Я использую 2 сторонние библиотеки в своем приложении для iPad. Исходный код для этих библиотек мне не известен. Эти библиотеки имеют функции с одинаковыми именами в обеих. Таким образом, я получаю «Apple Mach - O (id) error» из-за конфликта в именах функций. Я не могу изменить имена функций внутри них, так как исходный код неизвестен. При сборке приложения происходят ошибки.

Ошибка гласит:

ld: дубликат символа _T_strcpy в / Users / Desktop / без названия папка / Universal / lib / simulator / myLib.a (mem.o) и /Users/Library/Developer/Xcode/DerivedData/iOS-aqpprpcivvjjadbsutqqmtjsoczk/Build/Intermediates/ios.build/Debug-iphonesimulator/myApp iPad.build/Objects-normal/i386/pdcrypte2.o для архитектуры i386 collect2: ld вернул 1 команду состояния выхода /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 не удалось с кодом выхода 1

Может кто-нибудь поделиться некоторыми предложениями ??

1 Ответ

6 голосов
/ 04 августа 2011

Ты в значительной степени облажался.Создатели исходных библиотек не выполнили одно из самых основных правил разработки библиотеки: добавьте все экспортируемые символы с префиксом, специфичным для библиотеки, чтобы избежать коллизий пространства имен.

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

На самом деле, если библиотеки статичны, вы можете решить эту проблему: Как бороться со столкновениями символов между статически связанными библиотеками?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...