我很难掌握dylibs的概念。
我目前正在使用多个外部dylib在C ++中开发跨平台游戏。使用OSX上的CMake GUI,我为我的程序构建了几乎所有的依赖项,包括Box2D,SFML,Thor和CEGUI(进行中),并将它们放在桌面上的特定文件夹中。由于我不熟悉这些库,因此我创建了一个测试项目,其中包含了所有依赖于soul objectif的依赖项,以验证我的dylib是否有效。
这是我对dylibs的理解:
Dylib需要位于Frameworks
文件夹中的应用包内。
需要通过XCode中的构建设置将它们链接到您的项目中。
与静态库相比,Dylibs有助于缩小应用程序的大小。
考虑到这一点,我玩了我的测试项目的设置和构建阶段,并为每个依赖项创建了一个脚本,每次我将我的桌面上的dylib复制到我的应用程序包的Frameworks
文件夹中建立项目。
该应用程序,包括外部库的所有功能,都可以使用。
我唯一不明白的是,如果我需要将所有这些内容复制到我的应用包中,dylibs如何“减小应用的大小”?我猜测如果要在另一台计算机上运行我的测试应用程序,它可能会起作用,因为所有内容都在应用程序包中。但这与dylibs的目标并不矛盾吗?
以下是我咨询过的Apple动态库编程文档的link。
答案 0 :(得分:2)
看着你的要点
Dylibs需要位于Frameworks文件夹中的应用包内。
不,他们不能进入像/ Library / Frameworks这样的公共场所。如果有,它们可以被多个应用程序使用
需要通过XCode中的构建设置将它们链接到您的项目中。
是
与静态库相比,Dylibs有助于减小应用程序的大小。
这不是文件所说的。它说
使用动态库而不是静态库会减少应用程序的可执行文件大小。
因此减少了可执行文件(不是应用程序包)的大小。如果你在/ Library / Frameworks中放置了动态库,那么在两个应用程序之间共享它,那么这些应用程序的磁盘上的整体大小将比你使用静态库时要小。
一般情况下,如果您通过AppStore或类似版本发布并且只运行.app并且没有子进程,那么没有大小优势,但您仍然可以获得延迟加载等其他好处。但是,如果您运行子进程从主应用程序,然后您可以在动态库中共享代码,节省内存空间以及Apple的文档中解释。
如果您通过安装程序进行安装,则可以将框架放置在其他应用程序可以共享的位置。例如如果您有两个应用程序并且它们具有公共代码,则可以将其放在共享位置。