Xcode создание и использование статических библиотек с ошибками компоновки

#objective-c #ios #xcode4 #linker

#objective-c #iOS #xcode4 #компоновщик

Вопрос:

Я пытаюсь использовать EGOPhotoViewer в качестве статической библиотеки в моем проекте, так что мне не нужно включать весь их исходный код непосредственно в мой проект.

Я разветвил проект и создал статическую библиотеку cocoa touch для генерации libEGOPhoto.a

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

Ошибка, которую я получаю, связана со компоновкой и заключается в следующем:

ld: предупреждение: игнорирование файла /Users/pbrooks/Library/Developer/Xcode/DerivedData/EGOPhotoViewer-chniasxgqzkdbwhjedastrvwlmek/Build/Products/Debug-iphoneos/libEGOPhotoViewer.a файл был создан для архива, который не является связанной архитектурой (i386)

Неопределенные символы для архитектуры i386:
«_OBJC_CLASS_ $_EGOPhotoViewController», на который ссылается: objc-class-ref в RootViewController.o objc-class-ref в DetailViewController.o objc-class-ref в RootViewController_iPhone.o ld: символ (ы) не найден для архитектуры i386

лязг: ошибка: команда компоновщика завершилась ошибкой с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Есть какие-нибудь советы по правильной компоновке?

Ответ №1:

Вы пытаетесь выполнить компиляцию для simulator (для которой требуется архитектура i386 для процессоров Intel на вашем Mac). Вероятно, ваша библиотека скомпилирована для архитектуры ARMv6 / ARMv7, используемой для устройств iOS. Возможно, вы сможете просто запустить его на устройстве как есть. Если вы также хотите работать на симуляторе, вам следует создать разные библиотеки и связать их в зависимости от того, ориентируетесь ли вы на устройство iOS или на симулятор (или создайте универсальную библиотеку, которая содержит обе архитектуры).

Комментарии:

1. Я надеялся, что создаю библиотеку только для симулятора, но, увы, нет. Я еще не создал универсальную библиотеку, но спасибо за ссылку, и я попробую.

2. Спасибо за указатель на статью, это направило меня в правильном направлении, и, конечно, ваш прогноз был верным. Только сейчас нужно решить проблемы BAD_ACCESS с библиотекой.

3. Спасибо за подсказку. Автор статьи сказал, что статья устарела. новая статья находится здесь: db-in.com/blog/2011/07/universal-framework-iphone-ios-2-0