Каркасы для статических библиотек xcode - PullRequest
3 голосов
/ 25 февраля 2011

Я только что добавил связанную библиотеку в свой проект, используя вопрос здесь Процесс связывания статических библиотек ObjC в XCode и документа, на который есть ссылка в ответе.

Я знаю, что знаюбиблиотека использует объекты CoreData, такие как NSManagedObject, хотя в проекте библиотеки xcode платформа CoreData не добавлена ​​и она создается без ошибок.Однако, когда я собираю свое приложение, оно сталкивается с несколькими ошибками, такими как:

Undefined symbols:
"_OBJC_CLASS_$_NSManagedObject", referenced from:
  _OBJC_CLASS_$_AClass in library.a(AClass.o)

Таким образом, видя, как все ошибки упоминали объекты CoreData, я добавил инфраструктуру CoreData в свое приложение, и оно успешно собралось.Итак, теперь я попытался удалить CoreData Framework из моего приложения и добавил его в проект библиотеки, и они построили оба, и это не удалось.

Так почему же это работает, когда я добавил coredata в мой проект, но не в проект библиотеки,и только библиотека использует его?

(и почему библиотека собирается без необходимости использования каркаса coredata?)

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

Библиотека статическая. Это не отдельный кусок кода, он должен быть связан.

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

Если вы хотите использовать в своем приложении библиотеку с зависимостью от базовых данных, вы должны создать ссылку на Core Data.framework.

Добавление этапа компоновки в статическую библиотеку не имеет никакого эффекта, поскольку в создании статической библиотеки нет компоновщика, только компилятор (и архиватор).

0 голосов
/ 22 февраля 2014

Теперь эту проблему иногда можно избежать, используя новый синтаксис @import в заголовочном файле библиотеки.Компилятор автоматически связывается с используемой платформой, даже если вы используете статическую библиотеку.

...