Создание статической библиотеки iPhone для armv6 и armv7, которая включает другую статическую библиотеку - PullRequest
5 голосов
/ 16 марта 2010

У меня есть проект Xcode, у которого есть «главная» цель статической библиотеки, которая включает в себя / ссылки на кучу других статических библиотек из других проектов Xcode.

При создании целевой библиотеки для «Оптимизированный (armv6 armv7)» ошибка возникает на последнем этапе, на этапе CreateUniversalBinary. Для каждого файла .o библиотек, включенных в главную библиотеку, сообщается о следующей ошибке (например, файл FBConnectGlobal.o):

warning for architecture: armv6 same member name (FBConnectGlobal.o) 
in output file used for input files: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv6/libMTToolbox.a(FBConnectGlobal.o) 
and: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv7/libMTToolbox.a(FBConnectGlobal.o) 
due to use of basename, truncation and blank padding

В конце Xcode сообщает, что сборка прошла успешно. Однако при использовании окончательной статической библиотеки в проекте приложения она не будет собираться, потому что она находит повторяющиеся символы в одной части сборки (armv6) и пропускает символы в другой части сборки (armv7).

Есть идеи как это исправить?

M

Ответы [ 3 ]

5 голосов
/ 11 июня 2010

Я не думаю, что это ответ вообще. Это будет полностью работать, если у вас нет двух архитектур. В примере, приведенном в ссылке, можно объединить библиотеки a, b и c в одну библиотеку и связать ее с этим.

Проблема, с которой сталкивается Карл, состоит в том, что в библиотеке есть две разные архитектуры (arm6 и arm7) и компоновщик не может их правильно разрешить.

Я нашел проблему. Насколько я могу судить, это ошибка в libtool. Смотрите мой пост для решения:

https://binaryfinery.wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk/

3 голосов
/ 02 июня 2010

Не встраивайте библиотеки в другие библиотеки - это рецепт для путаницы, повторяющихся ошибок символов и трудно отлаживаемых результатов. Проверьте этот вопрос: Как я могу избежать ошибок "дубликата символа" в xcode с общими статическими библиотеками?

1 голос
/ 26 декабря 2011

Еще одно исправление, которое я нашел, - установить для архитектуры значение «armv6». ARCHS_STANDARD_32_BIT изменен с armv6 на armv6 armv7, что усугубляет ошибку libtool, которую вы описали выше. Очевидно, что он не будет производить оптимизированные для armv7 двоичные файлы, но он все равно должен нормально работать на iPhone 4.

...