一、名词解释
Executable:可执行文件
Dylib:动态库
Bundle:无法被连接的动态库,只能通过dlopen()加载
Image:指的是Executable,Dylib或者Bundle的一种
Framework:动态库(可以是静态库)和对应的头文件和资源文件的集合
二、mach-o组成结构
![](https://img.haomeiwen.com/i1684607/c7cb958161a5ba64.png)
Header:头部,包含可以执行的CPU架构,比如x86,arm64
Load commands:加载命令,包含文件的组织架构和在虚拟内存中的布局方式
Data:数据,包含load commands中需要的各个段(segment)的数据,每一个Segment都得大小是Page的整数倍
三、加载动态库
dyld会首先读取mach-o文件的Header和load commands。
接着就知道了这个可执行文件依赖的动态库。例如加载动态库A到内存,接着检查A所依赖的动态库,就这样的递归加载,直到所有的动态库加载完毕。通常一个App所依赖的动态库在100-400个左右,其中大多数都是系统的动态库,它们会被缓存到dyld shared cache,这样读取的效率会很高。
网友评论