静态库
优质
小牛编辑
129浏览
2023-12-01
静态库
一、Mach-O
下静态库的类型
.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
,省去了手动移除动态库中的模拟器指令集的工作。
二、生成一个.a
静态库
摆脱
xcode
和任何相关原理方面的知识, 用最简单、直接、原始的方式先来创建一个.a
静态库
- ar生成.a静态库
如果两个静态库存在重复
.o
,ar
会替换,libtool
不会, 只会警告
三、使用一个.a
静态库
链接使用 ar生成.a静态库 / libtool生成.a静态库 中手动创建的
.a
静态库
自制的
.a
过于简单, 接下来以AFN
为例, 链接使用
四、静态库的探究
通过
.a
静态库的链接过程得出结论, 链接一个库的三要素- 头文件
- 库文件目录
- 库文件名称
- ar查看.a静态库.o合集
- ar和libtool合并.a静态库