我有一个项目,在框架中,有*.framework
,*.dylib
,*.a
库。
我想知道他们是什么?以及他们之间的区别。
发布于 2019-06-04 05:51:32
动态和静态库
首先,库是为一个或多个体系结构编译的资源和代码本身的集合。
静态库(*.a):
对于
static libraries (*.a)
,应用程序使用的代码在编译期间由静态链接器复制到生成的可执行文件中。
动态库(*.dylib):
Dynamic libraries (*.dylib)
不同于静态库,因为它们在运行时与应用程序的可执行文件链接,而不是复制到其中。因此,可执行文件更小,而且由于代码只有在需要时才加载,因此启动时间通常更快。
动态和静态框架:
对于框架,我们首先需要理解捆绑概念(因为框架是一种特定的包)。包是一个包含子目录的文件目录。在iOS上,捆绑包可以方便地将相关文件放在一个包中--用于实例、图像、nibs或编译代码。系统将其视为一个文件,您可以在不知道其内部结构的情况下访问捆绑资源。 库还可能有其他资源:头、本地化文件、图像、文档和使用的示例。我们可以将所有这些都捆绑在一个包中--这个包的名称是框架。 静态框架包含一个随其资源打包的静态库。动态框架包含动态库及其资源。此外,动态框架还可以方便地在同一框架中包含相同动态库的不同版本!
其他有用的参考资料:
更新:
谢谢你接受我的回答!
编译为一个或多个体系结构?
每个体系结构都需要一个不同的二进制文件,当您构建一个应用程序时,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
https://stackoverflow.com/questions/56436843
复制相似问题