程序依赖很多的底层库(可执行的代码,二进制)
动态库静态库加载的区别
库为静态库:.a .lib ,在链接阶段,会将汇编生成的目标与引用库一起链接到可执行文件
动态库:framework .so .dll 程序编译并不会链接到目标代码证,而是在程序运行时才被载入 ,优势是减小打包后的体积,共享资源,节约内存,通过更新动态库达到更新程序的目的
APP启动--> 加载libsystem --> runtime 注册回调函数 --> 加载镜像 --> 执行map-images、load_images-->调用main函数
dyld加载:
- 环境变量相关处理(获取可执行文件,checkEnvironmentVarlabel,defaultUninitializeFallBackPath)
- 加载共享缓存(checkShareRegionDisable,mapSharedCache)
- 将dyld本身添加到UUID列表
- reloadAllImages
- 运行所有初始化程序
- 监听dyld的main