动态库由于二级定名空间,不会符号辩论
静态库是.o文件的合集,终极天生macho必要链接 ,被主app项目符号归并
app里的符号会把静态库的符号链接到一起,归并成一张符号表,在链接静态库符号时间,
other linker Flags 就是对链接静态库的设置
dead strip
不被main函数引用,的非导出符号会被干掉, oc默认都是导出符号,加个static就是本地符号了, 由于库要袒露一些方法被外界调用,以是导出符号不可以被干掉
默认设置other link flags是 -noall_load
Xlinker -noall_load:dead strip,默认不加载全部静态库的全部,有一样的类,只加载一个
-Xlinker -all_load :不dead strip,加载全部静态库的全部代码
-Xlinker -ObjC:加载全部OC干系代码,包罗分类
-force_load: 指定要加载谁人静态库的全部代码
-Xlinker就是告诉clang向ld转达参数,而且以上四个参数只对链接静态库时起作用,Xcode Build Settings中的dead_strip是链接器提供的一种优化方式,和这里链接静态库转达的参数不是一回事。
我们cocoapods内里other link flags Xlinker的设置是-ObjC,假如两个差别名字静态库有一样的类就辩论了
用llvm 的 llvm-objcopy --redefine-syms命令来修改辩论的符号
llvm-objcopy可实验文件可以用设置好的llvm编译好得到
要单一架构静态库处置惩罚符号,假如是多架构自行剥离,分别处置惩罚再归并
1 创建 aaa.m文件 写入新旧符号
拷贝辩论的符号 OBJC_CLASS |