Xcode for iPhone中静态和动态库的区别

时间:2010-09-16 05:03:34

标签: iphone xcode ios static-libraries dynamic-library

XCode中的静态库和动态库有什么区别?为什么Apple不允许我们在iOS应用程序中使用动态库?

4 个答案:

答案 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 frameworkembedded framework的{​​{1}}。 dynamic framework放置在应用程序的沙箱中,仅对该应用程序可用。首先为extensions创建此类型,以共享公共代码和资源。

sourceone more。另请阅读更多here