Компиляция статической библиотеки внутри статической библиотеки - проблема - PullRequest
2 голосов
/ 31 марта 2011

Я создал статическую библиотеку, которая внутри содержит другую статическую библиотеку (X) внутри папки «Link Binary With Libraries». Но когда я экспортирую свою библиотеку в пример проекта и пытаюсь скомпилировать ее, не удается найти путь к библиотеке X. Я добавляю "." в параметре сборки «Путь поиска библиотеки» при сборке моей статической библиотеки.

Что мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

AL Вместе с настройкой пути поиска заголовка попробуйте установить флаг других линкеров.

Перейдите в раздел «Флаги других линкеров» в разделе «Линкер» и добавьте «-ObjC» и «-all_load »к списку флагов

Надеюсь, что у вас работает,

2 голосов
/ 31 марта 2011

Если я правильно понял вашу проблему, то это не проблема пути поиска компоновщика, а скорее концептуальная проблема.

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

Общее и простое решение;

  • добавить оба проекта статической библиотеки в проект вашего приложения
  • развернуть включенные проекты
  • расширить цели вашего приложения-проекта
  • разверните "Связать двоичные файлы с библиотеками" - Entry
  • перетащите файлы продуктов ваших библиотечных проектов (реальных библиотек) вниз в эту "Link Binary With Libraries" -Entry
  • включает заголовочный путь к обоим вашим библиотечным проектам в настройках USER_HEADER_SEARCH_PATHS сборки

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

Концепция статической библиотеки в основном представляет собой набор объектных файлов, помещенных в один файл (архив). Связать статическую библиотеку с другой статической библиотекой довольно редко - ну, правильно сказать, невозможно.

... но опять же, нет ничего невозможного, когда дело доходит до кодирования;) ...

Решение библиотеки-оболочки;

  • используйте ar для извлечения всех объектных файлов из всех библиотек, которые вы хотите объединить
  • используйте ar, чтобы объединить все эти объектные файлы в одну большую новую библиотеку
...