学习记录
静态库和动态库在使用上的区别
-
静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝 (header + .a + 签名 + 资源文件)
-
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存 (header + .dylib + 签名 + 资源文件)
-
静态链接:是指把多个目标文件合并为一个可执行文件,把多个目标文件里相同性质的段合并到一起。比如:a.o和b.o目标文件合并成可执行文件ab。合并过程是a.o里面的代码段和b.o里面的代码段一起合并成ab里面的代码段,数据段同理,两个目标文件里面的数据段一起合并成ab里的数据段... 静态库链接id标志
-
-all_load 加载静态存档库的所有文件
-
-ObjC 加载静态存档库的所有文件 Objective-C类或Category
-
-force_load 加载指定静态存档库的所有文件。
- 注: -all_load 加载所有的所有成员。 此选项允许您指定特定的文件。
-
-load_hidden 隐藏指定的静态库文件 链接标识
-
@rpath (runpath search path) dyld(动态连接器)搜索路径, 运行时
@rpatch
指示dyld按顺序搜索路径列表,已扎到动态库. @rpath保存一个或者多个路径变量 -
@executable_path 表示可执行文件所在的目录,解析为可执行文件的绝对路径
-
@loader_path 表示被加载的"Mach-O"所在的目录,每次加载时,都有可能不同,由上层指定