什么是dyld?
- dyld 是动态链接器。
- 主要是链接mach-o文件,常见的mach-o文件有
- exec可执行文件
- .O类型的目标文件
- bundle文件
dyld加载的过程
- 1、递归加载可行文件所依赖的所有动态库
- 2、rebase 和binding
- 3、掉起main()函数
如何查看dyld具体流程,添加+(void)load方法,查看调用的堆栈信息
从打印信息来看,调用的函数是:
- dyld_start
- dyld_bootstrap::start
- dyld_main
接下来:
dyld_main 函数的执行流程
动态库是如何被加载的呢?
通过initializeMainExcutor()方法开始
- 通过循环调用processInitializer来递归加载所依赖的动态库,
- 加载动态库之前通过libsystem ,libdispatch,libobjc来初始化动态库所依赖的基础库
之后 是 smainExcutable(主程序开始初始化)
至此 动态库 和主程序均初始化完成