XCode中的静态库和动态库有什么区别?为什么Apple不允许我们在iOS应用程序中使用动态库?
答案 0 :(得分:12)
虽然您可以为Mac OS X构建动态库,但您无法将它们用于iPhone开发。
静态库只是一个目标文件的存档,它被拉入一个链接到它的程序中。链接器将取消归档所有归档文件,并在链接期间将其与其余目标文件一起拉入。
然而,动态库创建了一个共享对象文件,类似于程序但没有入口点,哪些程序可以链接并调用它们自己的符号链接到这些共享库中,而不会将它们拉入自身。
答案 1 :(得分:4)
动态库对于iPhone应用程序没有任何意义,因为无法在手机上安装库。我记得在阅读一些文档,其中苹果表示他们决定不使用动态库,因为他们不希望用户必须处理查找/更新库的麻烦。每个应用程序安装1个捆绑包要容易得多。
答案 2 :(得分:1)
Apple允许您制作动态库。在Mac OS X上,这些以.bundle或.dylib结尾(在Linux上不是.so或.a)。
具体是什么,你想做什么?你为dylib创建了一个目标吗?
答案 3 :(得分:0)
Static libraries (*.a)
是目标文件的集合。反过来,目标文件只是编译器中包含机器代码的文件的名称。
Dynamic libraries (*.dylib)
相对的是 static
,而不是复制到单个整体的可执行文件中,而是在实际需要时将其装入内存。这可能在加载时或在运行时发生。
Dynamic libraries
通常在应用程序之间共享,因此系统仅需要存储该库的一个副本,并允许不同的进程访问它。结果,从动态库中调用代码和数据要比从静态库中调用代码和数据慢。
所有iOS和macOS系统库均为dynamic
。因此,我们的应用程序将从Apple对标准库框架所做的未来改进中受益,而无需创建和发布新版本。苹果保留自己创建system frameworks
的能力;目前,第三方开发人员无法在iOS上创建system frameworks
。
如果您的Deployment target
是iOS8 +,则可以创建embedded framework
和embedded framework
的{{1}}。 dynamic framework
放置在应用程序的沙箱中,仅对该应用程序可用。首先为extensions创建此类型,以共享公共代码和资源。