美文网首页
2018-06-11

2018-06-11

作者: JoeSense | 来源:发表于2018-06-12 12:50 被阅读0次

    今天大致搞明白了动态库的一些原理,比如intall_name,rpath,@loader_patch,@executable_path配置的大概作用。
    以及-XLinker的使用
    不过印象还不够清晰,懂的也不是很彻底。后续有机会继续深入。
    主要搞明白了,上面几个路径是xcode动态库会增加的配置,用于动态库加载时的寻找路径。对于realTime来说,不设也没关系。
    看了sajia关于动态库的一些分享。看过就忘了。

    中午浏览了一下性能组的一些文档,没有太多收获。

    下午又修改了一下依赖分析工具。觉得需要把动态库打失败的一些原因搞清楚
    主要有3个原因:

    1. 本来就是动态库-_-,所以arch动态库失败了。

    2. 一些设计C++的库,没发现原因

    3. const常量命名不规范,导致import头文件后,定义了多个同名常量的符号。

    4. 判断如果是动态库,就移过去不需要arch

    5. 暂时不处理。

    6. 暂时不处理。

    -ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中(有个bug,如果有Category,但是没有Category的主类,那么Category不会被加载)

    -all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld:
    duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。

    -force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。

    相关文章

      网友评论

          本文标题:2018-06-11

          本文链接:https://www.haomeiwen.com/subject/lrnheftx.html