美文网首页
如何解决开发过程中的引入的第三方库冲突的问题?

如何解决开发过程中的引入的第三方库冲突的问题?

作者: little_ma | 来源:发表于2020-03-30 22:24 被阅读0次

    编译的过程:
    源代码 -> 预编译 ->编译器 -> 汇编器 -> 机器码 -> 连接器 ->可执行文件

    1、iOS开发过程中引入的第三方静态库编译产生“duplicate symbol”,如何解决?

    1)、引起这种问题的原因:
    一般是文件里面使用了有C语言定义的全局变量或者是方法名,在导入时因为重复产生了冲突。

    2)、解决思路:
    a、设置build setting中的编译选项,一般包括:

    -objc:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中。

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

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

    b、重新打包.a库:
    先将.a库精心解压,找到响应的.o文件,移除,然后再进行打包,产生新.a文件;

    c、宏编译处理:
    预处理头文件中Prefix.h加一个宏定义;
    针对冲突的文件进行宏定义处理,如:

    define AFHTTPSessionManager XXAFHTTPSessionManager

    相关文章

      网友评论

          本文标题:如何解决开发过程中的引入的第三方库冲突的问题?

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