我很难掌握dylib的概念。

我目前正在使用多个外部dylib开发C ++跨平台游戏。通过OSX上的CMake GUI,我为程序构建了几乎所有的依赖项,包括Box2D,SFML,Thor和CEGUI(进行中),并将它们放在桌面上的特定文件夹中。由于我不熟悉这些库,因此我创建了一个测试项目,其中包含我与灵魂对象的所有依赖关系,以验证我的dylib是否正常工作。

这是我对dylibs的了解:


Dylib必须位于您的应用程序捆绑包中的Frameworks文件夹中。
它们需要通过XCode中的构建设置链接到您的项目中。
与静态库相比,Dylibs有助于减小应用程序的大小。


考虑到这一点,我使用了测试项目的设置和构建阶段,并为每个依赖项创建了一个脚本,该脚本将在每次构建项目时将dylib从桌面复制到应用程序捆绑包的Frameworks文件夹中。

该应用程序(包括其来自外部库的所有功能)均可正常工作。

对此我唯一不了解的是,如果我需要将dylibs全部复制到我的应用程序捆绑包中,那么它们如何“减小应用程序的大小”?我猜想如果要在另一台计算机上运行我的测试应用程序,那可能会起作用,因为所有内容都在应用程序捆绑包中。但这与dylib的目标并不矛盾吗?

这是我查阅过的Apple动态库编程文档的link

最佳答案

看着你的要点


  Dylib必须位于Framework文件夹中的应用程序包内。


不,他们不可以将它们放在/ Library / Frameworks这样的普通地方。如果可以,它们可以被多个应用程序使用


  它们需要通过XCode中的构建设置链接到您的项目中。





  与静态库相比,Dylibs有助于减小应用程序的大小。


那不是文件所说的。它说


  使用动态库而不是静态库可减少应用程序的可执行文件大小。


因此,可执行文件(不是应用程序捆绑包)的大小减小了。如果您在/ Library / Frameworks中放置了动态库,然后在两个应用程序之间共享它,则这些应用程序在磁盘上的总大小将小于使用静态库的大小。

通常,如果您通过AppStore或类似版本进行发布,并且仅运行.app且没有子进程,则没有大小上的好处,但您仍然可以获得延迟加载等的其他好处。但是,如果确实从主目录运行了子进程应用程序,则您可以在动态库中共享代码,从而节省内存空间以及苹果文档中所述的内容。

如果通过安装程序安装,则可以将框架放置在其他应用程序可以共享和共享的位置。例如如果您有两个应用程序,并且它们具有通用代码,则可以将其放在一个共享的位置。

关于c++ - OS X开发和Dylibs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20425652/

10-11 23:09