framework 解决duplicate symbol 冲突

    在制作framework中,如果导入的第三方库和项目中引入的第三方库相同,会出现duplicate symobol 的错误,这时候在已知两个库引用的文件相同的情况下,我们可以自行的去切除其中一个,而确保项目中的编译.o文件唯一。
   方法如下:
   在终端中,使用lipo 对静态库进行拆分(.a 或者framework 包内的同名文件)

1、 lipo -info xxx . 查看文件是否是fat文件,支持处理器类型
2、lipo xxx -thin 类型 -output 类型文件名 . 把文件拆分成不同类型的thin文件
3、ar -d 类型文件名 重复的.o文件 . 删除重复的编译文件
4、 lipo -create 类型文件名... 类型文件名 -output 库名 。 合并成fat文件

    当然这是无奈之举,造成这样的原因是在 build settings 中的 other linker flags 中使用了-all_load 导致的。
    我们在制作静态库的时候,有时候免不了要对类的方法做扩展。
    如果是objective-C的代码,需要添加-objc。
    如果需要链接静态库的所有的代码到app,需要添加-all_load。
    正因为_all_load导入过于暴力,所以就导致了这种情况发生。

比较明智点的做法,如果必须要链接代码到app,是通过-force_load,链接指定静态库中的所有代码到app。
当然也是相对比较暴力的方法,如果真的是对库的大小有偏执狂的,可以参考stackoverflow,使用伪符号,来加载类的扩展。
https://stackoverflow.com/questions/2567498/objective-c-categories-in-static-library/22264650#22264650

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别...
    吃瓜群众呀阅读 14,150评论 3 42
  • 仅以方便自己查阅记录前言1.静态库和动态库有什么异同?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗...
    190CM阅读 9,801评论 0 4
  • 我没你勇敢,在爱一个人的时候;我没你决绝,在不爱一个人的时候。你清楚面对你的人,我就连到了别人心里也看不清。不负责...
    坚果酱紫阅读 482评论 0 0
  • 回首10年前,意气风发,毕业直奔杭城,为了自己的码农人生奋斗。人生的黄金10年已经奉献给了杭城。也开始扎根在...
    freebell阅读 2,880评论 0 0
  • 十善的关系 五戒与 十善含摄在五戒之中,故常有五戒十善并称。修五戒十善,同得人天果报。十善亦为五戒之分化,离五戒并...
    专注_adec阅读 4,768评论 0 0