Правильный способ ссылки на библиотеки из библиотек для iPhone / CocoaTouch - PullRequest
7 голосов
/ 08 марта 2009

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

Статическая библиотека, которую я пишу, зависит от libxml2. libxml2 имеет динамическую библиотеку (dylib) и статическую библиотеку (a). Я пробовал два подхода.

Первый подход - Когда я пытаюсь связать статическую библиотеку, добавив «-lxml2» в «Другие флаги компоновщика», сборка завершается с помощью следующего сообщения:

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library)

Подход второй - я могу успешно связываться с динамической библиотекой из моей статической библиотеки, но я не уверен, разрешено ли это (или правильный подход) на iPhone. Несмотря на то, что я создаю статическую библиотеку, разрешает ли Apple статические библиотеки, которые связываются с динамическими библиотеками? Я все еще изучаю статические библиотеки, но из моего понимания код из dylib будет объединен с моим кодом, чтобы создать одну библиотеку, таким образом, связывание с dylib не должно быть проблемой.

Подведем итог:

  • mylibrary.a -> libxml2.a [Не работает]
  • mylibrary.a -> libxml2.dylib [Строит, но правильно ли это и приемлемо?]

Ответы [ 3 ]

8 голосов
/ 08 марта 2009

libxml2.dylib доступен в SDK. Способ вправо состоит в том, чтобы дважды щелкнуть целевой узел / приложение в XCode, а затем в разделе «Общие» щелкнуть + в разделе «Связанные библиотеки» ... вы найдете libxml2. dylib в этом списке.

0: 42 в этом скриншоте вы можете увидеть, как CoreGraphics добавляется в проект.

0 голосов
/ 11 июня 2014

Вы не можете статически связывать библиотеки с другими статическими библиотеками. Вот почему фреймворки и библиотеки, зависящие от других статических библиотек, просят потребителя добавить их вручную в фазу сборки Link Binary With Libraries или настройку сборки Other Linker Flags.

0 голосов
/ 08 марта 2009

Apple не позволяет связывать платформы и / или библиотеки, отличные от тех, которые поставляются с SDK.

Marco

...