iOS程序开发引用的第三方库之间出现duplicate symbol时的处理方法

from:http://blog.k-res.net/archives/1024.html

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?
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
更新出现duplicate entry for key错误是由于在更新数据,插入的记录具有重复的键值。这通常是由于插入数据违反了唯一性约束条件所致。 为了解决这个问题,你可以采取以下步骤: 1. 检查数据库表的唯一性约束条件,确保正确设置了索引和唯一键。 2. 确定导致重复键错误的具体数据,在更新之前,检查您要插入的记录是否已经存在于数据库中。 3. 如果数据已经存在,您可以选择更新现有记录而不是插入新的记录。您可以使用UPDATE语句来更新现有记录。 4. 如果数据不存在,您可以考虑删除重复的记录,然后重新插入数据。请注意,在删除之前,请务必备份您的数据以防止意外数据丢失。 5. 在插入数据之前,您还可以添加一些额外的数据验证步骤,例如使用唯一性约束条件进行数据验证,以避免插入重复的记录。 请根据您的具体情况选择适当的解决方法,并确保在进行任何更改之前备份您的数据。这样可以保证数据的完整性和安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mysql #1062 –Duplicate entry '1' for key 'PRIMARY'](https://download.csdn.net/download/weixin_38536267/12835100)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [mysql error:#1062 Duplicate entry ‘***′ for key 1问题解决方法](https://download.csdn.net/download/weixin_38727579/12835507)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mysql #1062 –Duplicate entry ‘1’ for key ‘PRIMARY’](https://download.csdn.net/download/weixin_38545117/13691897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值