iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1505字,纯文字阅读大概需要3分钟。
内容图文
iOS 程序集成的第三方库过多时,很容易出现某几个库同时用到了一样的函数库,也就是在你的程序link时会提示duplicate symbol,而重复的符号又不是由你自己程序的代码造成的,也就说没法通过直接修改代码把重复的符号去掉!这样呢,要不就要求第三方库提供方该代码,要不就自己修改第三方库的库文件。第一种方法多少有点无理要求,所以还是直接用第二种方法自己解决了吧,也就是直接修改.a文件或framework里的库二进制文件:
这里我只列出针对.a文件的处理方法,framework操作过程类似。
开console,找到要解剖的.a文件,执行下列命令查看库包含的cpu架构代码:
lipo
-info libx.a
Architectures in the fat
file: libx.a are: i386 armv6 armv7
然后用 lipo -extract_family armv6 -output libx-inter.a libx.a
分离出arm版本的.a,这里有个小问题,按我的理解此命令应该对包含3种cpu代码的.a里的armv6部分进行操作,而实际分离出来的.a却是同时包含armv6和armv7的部分,也就是依然是”fat”
lib,这样是不能抽出.o的,因此还需要进行以下操作:
lipo libx-inter.a -thin armv6 -output
libx-armv6.a lipo libx-inter.a -thin armv7 -output
libx-armv7.a
这样就能分离出2份不同版本arm的.a了,然后进行解.o操作:
ar -x
libx-armv6.a
这部操作最好放到单独的文件夹里进行,会将link出.a的所有.o还原出来,然后有两种选择:一是把所有库对应cpu架构的部分都还原到这个位置,然后将重复的部分合并为一份,接着用后面的命令将所有.o再合并为一份公共lib。还有一种选择就是保留重复符号中的一份lib完好如初,将其余lib单独解开,剔出重复符号存在的.o,然后将该lib重新link回.a,以去除重复符号。
不管用哪种方法解决,最后的link回命令如下:
libtool -static -o ../libx-armv6.a *.o
当然,别忘了咱们的库都是有多份cpu架构指令的,所以,先要对每种cpu arch的库进行同样操作,然后还要将thin lib合并回fat
lib:
lipo -create -output libx.a libx-armv6.a libx-i386.a
libx-armv7.a
这样,再link回自己的app时就不会再出现duplicate symbol了。
参考文章:
- http://bbs.51cto.com/topic/thread-845884.html 使用多个第三方库出现duplicate symbol的解决办法
- http://stackoverflow.com/questions/5352113/how-do-i-turn-a-fat-library-into-a-non-fat-library How do I turn a “fat” library into a “non-fat” library?
原文:http://www.cnblogs.com/wudan7/p/3601233.html
内容总结
以上是互联网集市为您收集整理的iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法全部内容,希望文章能够帮你解决iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。