Мне трудно понять концепцию dylibs.
В настоящее время я занимаюсь разработкой кроссплатформенной игры на C ++ с использованием нескольких внешних библиотек. С помощью графического интерфейса CMake для OSX я построил почти все свои зависимости для своей программы, включая Box2D, SFML, Thor и CEGUI (в процессе), и поместил их в определенные папки на рабочем столе. Поскольку я незнаком с этими библиотеками, я создал тестовый проект, который включает все мои зависимости с объектом soul, чтобы проверить, работают ли мои dylibs.
Вот что я понимаю о dylibs:
Dylibs должны быть внутри вашего пакета приложений в Frameworks
папка.
Они должны быть связаны с вашим проектом через настройки сборки в XCode.
Dylibs помогает уменьшить размер приложения по сравнению со статическими библиотеками.
Имея это в виду, я поиграл с настройками и фазами сборки для моего тестового проекта и создал скрипт для каждой зависимости, который будет копировать dylibs с моего рабочего стола в Frameworks
папка моего приложения каждый раз, когда я строю проект.
Приложение, включая все его функции из внешних библиотек, работает.
Единственное, что я не понимаю по этому поводу, как dylibs «уменьшает размер приложения», если мне нужно скопировать их все в свой пакет приложений? Я предполагаю, что если бы я запустил мое тестовое приложение на другом компьютере, это, вероятно, сработало бы, потому что все в комплекте приложений. Но не противоречит ли это цели дилибов?
Вот ссылка на сайт к документации по программированию динамической библиотеки Apple, с которой я ознакомился.
глядя на вас основные моменты
Dylibs должен находиться внутри вашего пакета приложений в папке Frameworks.
Нет, они не могут пойти в общее место, как / Библиотека / Рамочные. Если там они могут быть использованы более чем одним приложением
Они должны быть связаны с вашим проектом через настройки сборки в XCode.
да
Dylibs помогает уменьшить размер приложения по сравнению со статическими библиотеками.
Это не то, что говорится в документе. Это говорит
Использование динамических библиотек вместо статических уменьшает размер исполняемого файла приложения.
Таким образом, размер исполняемого файла (не пакета приложения) уменьшается. Если вы поместили динамический библиотека в / Library / Frameworks или аналогичный, то поделитесь им с двумя приложениями, тогда общий размер на диске этих приложений будет меньше, чем если бы вы использовали статические библиотеки.
В целом, если вы выполняете релиз через AppStore или подобный инструмент и просто запускаете .app и у вас нет подпроцессов, выигрыш в размере не будет, но вы все равно получите другие преимущества, связанные с отложенной загрузкой и т. Д. Если, тем не менее, вы запускаете подпроцесс из основного Приложение затем вы можете поделиться кодом в динамической библиотеке, экономя пространство памяти, а также объяснено в документе Apple.
Если вы устанавливаете с помощью установщика, вы можете разместить фреймворки там, где они могут быть использованы другими приложениями. например Если у вас есть два приложения и они имеют общий код, вы можете поместить его в общее место.
Других решений пока нет …