美文网首页项目排查 问题
iOS存在三方库冲突:duplicate symbol _OBJ

iOS存在三方库冲突:duplicate symbol _OBJ

作者: 皮乐皮儿 | 来源:发表于2023-08-03 08:58 被阅读0次

    问题背景

    场景1

    第三方库中引用的库(一般是源码形式)与自己项目引入的三方库冲突

    解决方案

    删除项目中的第三方库引用即可

    场景2

    项目中引用的多个第三方库出现冲突,某些.o文件重复报错

    解决方案

    这种无法通过直接删除重复文件的方式,只能通过对第三方库进行拆解,删除重复的.o文件,再重新合并成新的静态库,替换原有的静态库即可
    具体的操作步骤如下:

    lipo -info libexample.a

    通过这个命令可以解析出来.a中包含哪些平台,一般如果有fat file,表示支持多个平台

    类似: Architectures in the fat file: libexample.a are: i386 armv7 armv7s x86_64 arm64

    下面就是解包,打包操作了,以arm64平台为例:

    1. 创建临时文件arm64,用来存放解压后的.o文件: mkdir arm64
    2. 取出arm64平台的包:lipo libexample.a -thin arm64 -output arm64/libexample_arm64.a
    3. 检查库中所包含的文件列表:cd arm64 && ar -t libexample_arm64.a
    4. 解压出object file文件(含有.o后缀的):ar xv libexample_arm64.a
    5. 根据报错提示,找到要删除的.o文件删掉:rm xxx.o
    6. 重新打包object file 生成 .o 文件:cd .. && ar rcs libexample_arm64.a arm64/*.o
    7. 将其他平台按照1-6步骤进行拆解和删除重复文件
    8. 将多个平台的.a文件进行合并成新的.a文件: lib -create libexample_arm64.a libexample_i386.a libexample_armv7 libexample_armv7s libexample_new.a
    9. libexample_new.a 替换原来的 libexample.a 即可

    其他重复的库采用同样的方式处理

    相关文章

      网友评论

        本文标题:iOS存在三方库冲突:duplicate symbol _OBJ

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