Xcode создает и использует статические библиотеки с ошибками компоновки - PullRequest
1 голос
/ 09 ноября 2011

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

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

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

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

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

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

Какие-либо советы по правильной установке этой ссылки?

1 Ответ

4 голосов
/ 09 ноября 2011

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

...