美文网首页
iOS静态库的架构合并与目标文件剔除

iOS静态库的架构合并与目标文件剔除

作者: 曼妙的汉子 | 来源:发表于2018-06-20 19:40 被阅读66次
    在构建iOS静态库与静态Framework的时候,为了方便,我们经常需要把用于模拟器的x86_64版本和用于真机不同架构的库合并起来,命令很简单:
    lipo -create for_simulator.a for_device.a -output universal.a
    
    在使用第三方依赖的时候,如果第三方依赖以二进制库文件的形式存在,偶尔会遇到不同的第三方依赖又引用了相同的其他依赖,导致符号重复的链接错误,解决的办法也不复杂,从某一个第三方依赖的二进制库中把重复的目标文件剔除,方法也很简单:
    1. 通过xcode的链接错误找到产生冲突的第三方依赖
    2. 选其中一个或者几个依赖,列出依赖的二进制库包含的处理器架构
      lipo -info target.a
    3. 将所有处理器架构分离出来,以armv6为例
      lipo -extract_family armv6 -output target-armv6.a target.a
    4. 将分离出来的二进制文件进一步分离成目标文件
      ar -x target-armv6.a
    5. 上一步将在当前文件夹下生成库文件包含的所有目标文件,将需要剔除的目标文件删掉,并且重新合并库文件
      libtool -static -o target.a *.o
    6. 对所有处理器架构都按3到5处理完成后,将不同处理器架构的库文件合并为一个,不再赘述
    值得注意的是,当第三方依赖引用了相同的其他依赖时,有可能因为实现版本不同而产生陷阱,这种情况只能联系第三方依赖的供应商来咨询和解决了。

    相关文章

      网友评论

          本文标题:iOS静态库的架构合并与目标文件剔除

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