Как включить в них статические библиотеки с одинаковыми именами для файлов OBJECT? - PullRequest
4 голосов
/ 03 августа 2011

Я занимаюсь разработкой приложения для iPad, в которое включены 2 сторонние статические библиотеки. Имена объектных файлов в этих 2 библиотеках совпадают. При создании приложения я получаю

«Ошибка Apple Mach -O (id)»

из-за одинаковых имен объектных файлов в этих 2 библиотеках. Как решить эту проблему?

Ошибка выглядит так:

ld: duplicate symbol _T_strcpy in /Users/indiait-supportservices/Desktop/untitled folder/Universal/lib/simulator/libSecurIDLib.a(mem.o) and /Users/indiait-supportservices/Library/Developer/Xcode/DerivedData/ReceiverForiOS-aqpprpcivvjjadbsutqqmtjsoczk/Build/Intermediates/ReceiverForiOS.build/Debug-iphonesimulator/myApp iPad.build/Objects-normal/i386/pdcrypte2.o for architecture i386

collect2: ld returned 1 exit status

Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 

failed with exit code 1.

Ответы [ 2 ]

0 голосов
/ 05 августа 2011

Похоже, у вас есть два модуля, определяющих одну и ту же функцию, один в libSecurIDLib.a(mem.o) и pdcrypte2.o.Они должны быть в их собственных пространствах имен (C ++) или иметь префикс, чтобы они не сталкивались (C).

Есть обходных путей , если это невозможно, но лучше называть вещибезопасно.

0 голосов
/ 05 августа 2011

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

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

Наконец, вы можете добавить следующую env var для устранения проблем с переопределением категорий: OBJC_PRINT_REPLACED_METHODS=YES. Это будет записывать, какие имена методов были переопределены по категориям, на случай, если это проблема.

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