Разработка OS X и Dylibs

Мне трудно понять концепцию dylibs.

В настоящее время я разрабатываю кроссплатформенную игру на С++ с использованием нескольких внешних dylib. С графическим интерфейсом CMake для OSX я создал почти все свои зависимости для своей программы, включая Box2D, SFML, Thor и CEGUI (в процессе), и поместил их в определенные папки на рабочем столе. Поскольку я не знаком с этими библиотеками, я создал тестовый проект, включающий все мои зависимости с Soul objectif, чтобы проверить, работают ли мои dylibs.

Вот что я понимаю о dylibs:

  • Dylibs должен находиться внутри вашего пакета приложений в папке Frameworks.

  • Их необходимо связать с вашим проектом через настройки сборки в XCode.

  • Dylibs помогает уменьшить размер приложения по сравнению со статическими библиотеками.

Имея это в виду, я поиграл с настройками и фазами сборки для своего тестового проекта и создал сценарий для каждой зависимости, который будет копировать dylibs с моего рабочего стола в папку Frameworks моего пакета приложений каждый раз, когда я собираю проект.

Приложение, включая все его функции из внешних библиотек, работает.

Единственное, чего я не понимаю в этом, так это то, как dylibs «уменьшают размер приложения», если мне нужно скопировать их все в мой пакет приложений? Я предполагаю, что если бы мое тестовое приложение было запущено на другом компьютере, оно, вероятно, сработало бы, потому что все находится в комплекте приложений. Но разве это не противоречит цели dylibs?

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


person Corb3nik    schedule 06.12.2013    source источник


Ответы (1)


глядя на вас основные моменты

Dylibs должен находиться внутри вашего пакета приложений в папке Frameworks.

Нет, они не могут находиться в обычном месте, например /Library/Frameworks. Если они могут использоваться более чем одним приложением

Их необходимо связать с вашим проектом через настройки сборки в XCode.

Да

Dylibs помогает уменьшить размер приложения по сравнению со статическими библиотеками.

Это не то, что говорится в документе. Это говорит

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

Таким образом уменьшается размер исполняемого файла (не комплекта приложения). Если вы поместили динамическую библиотеку в /Library/Frameworks или аналогичную, а затем разделили ее между двумя приложениями, то общий размер на диске этих приложений будет меньше, чем если бы вы использовали статические библиотеки.

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

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

person mmmmmm    schedule 06.12.2013
comment
Спасибо за четкий ответ! Я не увидел разницы между пакетом приложений и исполняемым файлом. Означает ли это, что мой этап сборки с копированием всех моих dylib в папку frameworks моего пакета приложений в порядке? - person Corb3nik; 06.12.2013