`*.framework`、`*.dylib`和`*.a`库有什么区别?

5
我有一个项目,在框架中有*.framework*.dylib*.a库。 's the 我想知道它们是什么?以及它们之间的区别。
1个回答

13

动态库和静态库

首先,库是为一个或多个架构编译的资源和代码的集合。

静态库(*.a):

对于静态库(*.a),应用程序使用的代码在编译时由静态链接器复制到生成的可执行文件中。

动态库(*.dylib):

动态库(*.dylib)与静态库不同,它们在运行时与应用程序的可执行文件链接,但不会被复制到可执行文件中。因此,可执行文件更小,并且因为只有在需要时才加载代码,启动时间通常更快。

动态和静态框架:

对于框架,我们首先需要理解bundle的概念(因为框架是一种特定类型的bundle)。bundle是一个带有子目录的文件目录。在iOS上,bundle用来方便地将相关文件打包在一起 - 例如,图像,nibs或已编译的代码。系统将其视为一个文件,您可以访问bundle资源而不知道其内部结构。
库也可能具有其他资源:标题,本地化文件,图像,文档和使用示例。我们可以将所有这些内容捆绑在一个bundle中 - 这个名称就是框架。
静态框架包含与其资源一起打包的静态库。动态框架包含动态库及其资源。除此之外,动态框架还可以方便地在同一框架中包含相同动态库的不同版本!

其他有用的参考资料:

Hackernoon

Runtastic

Static library

Software framework

更新:

感谢您接受我的答案!

编译一个或多个架构?

每个架构都需要不同的二进制文件,当您构建应用程序时,Xcode将为您当前使用的任何架构构建正确的二进制文件。例如,如果您要求在模拟器中运行,则它只会构建i386版本(64位为x86_64)。

这意味着构建速度尽可能快。当您存档应用程序或以发布模式构建时,Xcode将为所有三个ARM架构构建,从而使应用程序能够在大多数设备上运行。那其他构建呢?

当然,当您构建框架时,希望开发人员能够在所有可能的架构上使用它,对吧?当然,因为这意味着您可以赢得同行的尊重和钦佩。

因此,您需要让Xcode为所有五个架构构建。此过程创建所谓的fat二进制文件,其中包含每个架构的切片。

arm7: Used in the oldest iOS 7-supporting devices
arm7s: As used in iPhone 5 and 5C
arm64: For the 64-bit ARM processor in iPhone 5S
i386: For the 32-bit simulator
x86_64: Used in 64-bit simulator

Raywenderlich: 多架构


你能解释一下什么是“为一个或多个架构编译”吗? - user7693832

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接