Ошибка связи с приложением iOS с перекрестной ссылкой на несколько статических библиотек - PullRequest
1 голос
/ 16 декабря 2010

Я разделяю проект Xcode iPhone на несколько небольших проектов для повторного использования кода. Структура выглядит так:

+------------+
|    App     |
+------------+
      |
      +------------------+
      |                  |
+--------------+ +--------------+
| Static Lib A | | Static Lib B |
+--------------+ +--------------+
        |                |
        +----------------+
                |
         +--------------+  +----------------+
         | Static Lib Z |--| Static Lib KAL |
         +--------------+  +----------------+

Все компилируется правильно, но как только приложение связано, компоновщик не может найти 2 символа библиотеки KAL (lib с открытым исходным кодом). Каждая библиотека имеет перекрестную ссылку, и все архивы добавляются на этапе сборки «Связать двоичные файлы с библиотеками».

Ошибки:

Неопределенные символы:
"_OBJC_CLASS _ $ _ KalViewController", ссылка с которого:
objc-class-ref-to-KalViewController в libA.a (AViewController.o)
"_OBJC_CLASS _ $ _ KalDate", ссылка с которого:
objc-class-ref-to-KalDate в libA.a (AViewController.o)
ld: символ (ы) не найдены
collect2: ld вернул 1 статус выхода

Я использую класс из LibZ в Libiew AViewController, который, в свою очередь, использует класс в LibKAL.

PS: разделение A и B происходит просто потому, что не каждая сборка приложения нуждается в функциональности, предоставляемой этими двумя.

1 Ответ

0 голосов
/ 16 декабря 2010

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

...