Подтвердить что ты не робот

Undefined символы для архитектуры x86_64 на Xcode 6.3

Я завершаю библиотеку CometD с открытым кодом C, я подумал, что было бы неплохо открыть ее пользователям OSX/iOS, таким как я.

Чтобы облегчить работу разработчиков OSX/iOS, я хотел переключиться с статической библиотеки C на Xcode iOS Static Libary. Поэтому я следил за советами, найденными в сети, и создал статическую iOS-совместимую библиотеку.

Проблема в том, что каждый раз, когда я пытаюсь ее использовать, я получаю ошибку типа:

Undefined символы для архитектуры x86_64:   ******, на который ссылаются:       - ********** в *******. (*******. o)

Эта ошибка повторяется почти для каждой функции C, которая у меня есть в моей библиотеке.

Сначала я подумал, может быть, библиотека не x86_64 compatible, пустая или действительно не имеет в ней символа x86_64.

Итак, я проверил с "lipo -info" в библиотеке, и вот ответ:

введите описание изображения здесь

Чтобы действительно быть уверенным, что я также использовал "nm -arch x86_64" в библиотеке и пошел на выбор для нескольких функций undefined, о которых сообщает Xcode, как об ошибках. Я думал, что я ошибаюсь и не нахожу ничего, кроме как угадать, что?

Я нашел символы: введите описание изображения здесь

введите описание изображения здесь

Итак, мой вопрос:

Если символы присутствуют в совместимой с x86_64 библиотеке, почему Xcode вызывает эту ошибку? Даже если я компилирую библиотеку для всех типов arm */s, я все еще получаю эту ошибку x86_64.

Я ничего не осознаю, или я просто делаю это неправильно?

Ваши ответы всегда приветствуются.

Обновить (это ссылка на проект Xcode): https://github.com/GhostGumm/CometD-x86_64-issue

Обновление 2: г-н Троянфо обратил мое внимание на ссылку "Предупреждение, которое я имел при компиляции". Действительно, компоновщик, казалось, пропустил загрузку библиотеки, которая ищет каталог, который не существует. После перемещения библиотеки в нужный каталог, связав ее вручную, ошибка x86_64 исчезла.

К сожалению, проблема все еще присутствует. Сразу после успешной компиляции я попытался использовать lib, но, когда я "распределяю" и "init" свой основной класс, например:

  ZetaFactory *Client = [[ZetaFactory alloc] init]; 

Ошибка x86_64 возвращается рев с подлинной жестокостью миллиарда солнц. Я разместил ссылку на проект Xcode, пожалуйста, не стесняйтесь протестировать его, так как у меня нет больше идей о том, как его исправить, но что еще более важно, почему и где это становится ошибкой.

Тем не менее, я продолжу расследование.

4b9b3361

Ответ 1

Я загрузил и попытался создать ваш проект. Если посмотреть на ошибки ссылки - init_stack_remove_data не найден, например, они верны. В исходном тексте проекта нет определения init_stack_remove_data.

В выводе "nm -arch x86_64", который вы цитируете выше, обратите внимание, что "U" перед определением функции указывает на использование этой функции, а не на ее определение. Выход nm показывает, что компоновщик прав - эти функции вызываются вашим кодом, но никогда не определяются. Когда они будут определены, вы увидите "T" перед функцией вывода nm.

Вам нужно обновить свой проект остальной частью необходимого источника, прежде чем он свяжется без ошибок.