使用拆分库的方法解决iOS中Duplicate Symbol静态库冲突
来源:互联网 发布:java 接口 编辑:程序博客网 时间:2024/06/01 20:47
在自己写SDK或者使用第三方库的时候,可能会遇到编译时Duplicate Symbol错误,本文就是通过使用拆分库的方法,将库中冲突的目标文件去除,以解决此类问题。
遇到此类问题,一般都是两个库中包含了相同的目标文件导致,可以通过去除其中一个库中的冲突目标文件来解决。
大致解决思路如下:
- 查看库支持的框架类型
- 使用lipo命令分别将.a拆分成库所支持框架类型的.a库
- 使用ar命令删除对应框架类型.a库中冲突的.o目标文件
- 使用lipo命令将处理后的各个框架.a库进行合并即可
具体操作步骤如下
- 查看库支持的框架类型
现有的框架类型应该就是i386、x86_64、armv7、arm64这个几个了,这里以微信的SDK为例,在终端中对应路径下输入以下命令,查看支持的框架类型
在终端可以看到结果,支持armv7、i386、x86_64、arm64这个几个框架类型lipo -info libWeChatSDK.a
Architectures in the fat file: libWeChatSDK.a are: armv7 i386 x86_64 arm64
- 使用lipo命令分别将.a拆分成库所支持框架类型的.a库
因为微信的SDK支持armv7、i386、x86_64、arm64这个几个框架类型,所以我们需要分别将其拆分成对应的四个框架类型的库,输入以下命令
可以看到以下生成的几个文件lipo libWeChatSDK.a -thin armv7 -output libWeChatSDK_armv7.alipo libWeChatSDK.a -thin i386 -output libWeChatSDK_i386.alipo libWeChatSDK.a -thin x86_64 -output libWeChatSDK_x86_64.alipo libWeChatSDK.a -thin arm64 -output libWeChatSDK_arm64.a
libWeChatSDK_arm64.a libWeChatSDK_x86_64.alibWeChatSDK_armv7.a libWeChatSDK_i386.a libWeChatSDK.a
- 使用ar命令删除其中一个.a的冲突的.o
如果Xcode里提示Duplicate Symbol都是说xxx.o与xxx.o冲突,则我们就删除的对应的xxx.o目标文件,比如我们删除amr64框架下面的xxx.o目标文件,输入以下命令
这里,只需要删除冲突框架中的xxx.o文件即可,比如说,只有在i386这个框架下,编译报错提示提示Duplicate Symbol都是说xxx.o与xxx.o冲突,其他框架编译正常,则只需要输入以下命令即可ar -d libWeChatSDK_arm64.a xxx.o
ar -d libWeChatSDK_i386.a xxx.o
- 使用lipo命令将处理后的各个框架.a库合并
当我们将冲突的目标文件删除之后,我们可以做收尾工作了。将处理过的的各个框架类型的库进行合并,命令如下
合并之后,记得检查一下合并库支持的框架类型,看看有没有遗漏lipo -create -output libWeChatSDK.a libWeChatSDK_i386.a libWeChatSDK_x86_64.a libWeChatSDK_armv7.a libWeChatSDK_arm64.a
看到支持的框架lipo -info libWeChatSDK.a
这就没有遗漏了Architectures in the fat file: libWeChatSDK.a are: armv7 i386 x86_64 arm64
到此,将合并后的库重新添加到工程中,测试一下,如果将所有冲突的目标文件都去除了,冲突问题因此解决了。
阅读全文
0 0
- 使用拆分库的方法解决iOS中Duplicate Symbol静态库冲突
- iOS解决两个静态库的冲突 duplicate symbol
- iOS解决两个静态库的冲突 duplicate symbol
- iOS解决两个静态库的冲突 duplicate symbol
- iOS解决两个静态库的冲突 duplicate symbol
- iOS解决两个静态库的冲突 duplicate symbol
- iOS解决两个静态库的冲突 duplicate symbol
- iOS解决两个静态库的冲突 duplicate symbol
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- iOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- [转载]IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- iOS 解决一个因三方静态库冲突产生的duplicate symbol的问题
- iOS "duplicate symbol"解决第三方库之间的冲突
- phpmyadmin中创建一个存储过程或函数,提示出错怎么办?
- [置顶] [Centos6.5]MongoDB安装以及php_mongo扩展的安装
- 如何成为一个高效的设计师
- MYSQL之事务隔离级别与锁的关系
- 软件需求3个层次、过程管理、审计目的、测试分类标准、测试过程等
- 使用拆分库的方法解决iOS中Duplicate Symbol静态库冲突
- iframe 是否加载完成的完美方法
- Xilinix ARM平台下编译Qt & Qwt Build Instructions (Qt 5.4.2, Qwt 6.1.2)
- AngularJs实现进入聊天界面时的自动滚动
- 字符串匹配
- Amaze学习笔记2
- 字符串日期转换成时间对象
- 数据类型范围,有符号类型无符号类型,正负, 反码补码的终极理解,一看就懂
- skyline 6.6.1 javascript实现遍历树,然后获取图层树中的属性数据