今天大致搞明白了动态库的一些原理,比如intall_name,rpath,@loader_patch,@executable_path配置的大概作用。
以及-XLinker的使用
不过印象还不够清晰,懂的也不是很彻底。后续有机会继续深入。
主要搞明白了,上面几个路径是xcode动态库会增加的配置,用于动态库加载时的寻找路径。对于realTime来说,不设也没关系。
看了sajia关于动态库的一些分享。看过就忘了。
中午浏览了一下性能组的一些文档,没有太多收获。
下午又修改了一下依赖分析工具。觉得需要把动态库打失败的一些原因搞清楚
主要有3个原因:
本来就是动态库-_-,所以arch动态库失败了。
一些设计C++的库,没发现原因
const常量命名不规范,导致import头文件后,定义了多个同名常量的符号。
判断如果是动态库,就移过去不需要arch
暂时不处理。
暂时不处理。
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中(有个bug,如果有Category,但是没有Category的主类,那么Category不会被加载)
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld:
duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。