静态库 - ShenYj/ShenYj.github.io GitHub Wiki
-
.a-
.o文件合集 - 程序代码的集合,是共享程序代码的一种方式
-
-
.framwork-
苹果针对
.a的一层包装 -
在
Mac OS/iOS平台,Framework实际上是一种打包方式, 将库的二进制文件、头文件和有关的资源文件打包到一起, 方便管理和分发.-
Framework可以通俗的理解为封装了共享资源的具有层次结构的文件夹。共享资源可以是nib文件、国际化字符串文件、头文件、库文件等等。它同时也是个Bundle,里面的内容可以通过Bundle相关API来访问。
Framework可以是static framework或dynamic framework。 在iOS App打包完成后,如果Framework包含了模拟器指令集(x86_64或i386),那么用Xcode发布App的时候,会报unsupported architectures的错误,所以需要我们手动或脚本去移除。 -
Framework和系统的UIKit.Framework还是有很大区别的. 系统的Framework不需要拷贝到目标程序中, 我们自己做出来的Framework哪怕是动态的, 字后也还是要拷贝到App中(App和Extension的Bundle是共享的), 因此苹果又把这种Framework成为Embedded Framework.
-
-
-
.xcframework-
2019年推出 优化不同架构的处理
-
XCFramework是XCode11中提出的一个新特性,是由XCode创建的一个可分发的二进制包,它包含了framework或library的一个或多个变体,因此可以在多个平台(iOS、macOS、tvOS、watchOS) 上使用,包括模拟器。XCFramework可以是静态的,也可以是动态的。xcframework的好处就是用Xcode发布的时候,Xcode会自动选用正确的指令集Frameworks,省去了手动移除动态库中的模拟器指令集的工作。
-
摆脱
xcode和任何相关原理方面的知识, 用最简单、直接、原始的方式先来创建一个.a静态库
-
如果两个静态库存在重复
.o,ar会替换,libtool不会, 只会警告
链接使用 ar生成.a静态库 / libtool生成.a静态库 中手动创建的
.a静态库
自制的
.a过于简单, 接下来以AFN为例, 链接使用
-
通过
.a静态库的链接过程得出结论, 链接一个库的三要素- 头文件
- 库文件目录
- 库文件名称
-
链接静态库的优化