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

问题描述 投票:18回答:4

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

iphone xcode ios static-libraries dynamic-library
4个回答
12
投票

虽然您可以为Mac OS X构建动态库,但您无法将它们用于iPhone开发。

静态库只是一个目标文件的存档,它被拉入一个链接到它的程序中。链接器将取消归档所有归档文件,并在链接期间将其与其余目标文件一起拉入。

然而,动态库创建了一个共享对象文件,类似于程序但没有入口点,程序可以将这些文件链接起来并将它们自身调用到这些共享库中,而不是将它们拉入自身。


4
投票

动态库对于iPhone应用程序没有任何意义,因为无法在手机上安装库。我记得在阅读一些文档,其中苹果表示他们决定不使用动态库,因为他们不希望用户必须处理查找/更新库的麻烦。每个应用程序安装1个捆绑包要容易得多。


1
投票

Apple确实允许您制作动态库。在Mac OS X上,这些以.bundle或.dylib结尾(在Linux上不是.so或.a)。

具体是什么,你想做什么?你为你的dylib创建了一个目标吗?


0
投票

Static libraries (*.a)是目标文件的集合。反过来,目标文件只是一个来自编译器并包含机器代码的文件的名称。

Dynamic libraries (*.dylib)static相反,而不是被复制到单个单片可执行文件中,在实际需要时被加载到内存中。这可能发生在加载时或运行时。

Dynamic libraries通常在应用程序之间共享,因此系统只需要存储库的一个副本,并让不同的进程访问它。因此,从动态库调用代码和数据比从静态库调用代码和数据要慢。

所有iOS和macOS系统库都是dynamic。因此,我们的应用程序将受益于Apple对标准库框架的未来改进,而无需创建和发布新版本。 Apple保留为自己创造system frameworks的能力;目前,第三方开发者无法在iOS上创建system frameworks

如果您的Deployment target是iOS8 +,您可以创建embedded frameworkembedded frameworkdynamic frameworkEmbedded frameworks放置在应用程序的沙箱中,仅适用于该应用程序。首先为extensions创建此类型以共享公共代码和资源。

sourceone more。另请阅读更多here

© www.soinside.com 2019 - 2024. All rights reserved.