美文网首页
iOS 静态库.a冲突解决

iOS 静态库.a冲突解决

作者: _清墨 | 来源:发表于2019-06-26 15:43 被阅读0次
近期项目中要集成直播的sdk,项目配置完成后编译报了如下错误: 1081561530148_.pic_hd.jpg

以前我是有过专门做SDK的经验,所以像这种sdk报错遇到的不少,如图有价值也很明显的问题点在于:

duplicate symbol xxxx in xxxx

这种问题一般都是文件里面使用C语言定义的全局变量名或是函数名,在导入的时候因为重复产生了冲突。(.a用到了,我们也用到了,或者多个.a都用到)
基于此往后看,可以找出重复的文件信息,上图是 SAMKeychain 和 SAMKeychainQuery,解决方案就是从.a中把这些重复的.o删除。(附带一个不高级方法,若冲突的文件你能修改,也可以直接改名)

OK,开始解决问题,解决问题还得从我们导入的第三方静态库入手,我们用的直播sdk,先用命令行查看它的相关信息:

cd /Users/zlwh/Desktop/微吼直播sdk 
lipo -info libVHallSDK.a
Architectures in the fat file: libVHallSDK.a are: armv7 i386 x86_64 arm64 

这里插播一下:
arm64,armv7s,armv7,他们是ARM处理器的指令集,是在手机上的
i386|x86_64 是Mac处理器的指令集,i386表示支持模拟器运行

image.png

他们的sdk有说明,只支持iphone 5s以上的手机,所以在sdk中没有打包armv7s的架构。我们在命令行中得到的信息
Architectures in the fat file: libVHallSDK.a are: armv7 i386 x86_64 arm64
看好这个fat,fat file表示这个库里面合并了多于1个框架。而删除.0不能在这种fat file里,所以我们还得从库中拆分出arm64类型的.a

lipo libVHallSDK.a -thin arm64 -output lib64.a

这行命令运行后,我们的文件夹中会多出一个lib64.a


image.png

接着我们再查看lib64.a的相关信息:

lipo -info lib64.a
Non-fat file: lib64.a is architecture: arm64

此时它已经是一个只有arm64框架的.a了,接下来我们就可以执行删除.o的命令了

ar -d lib64.a SAMKeychain.o
ar -d lib64.a SAMKeychainQuery.o

这时候我们得到的就是剔除了两个重复.o的.a库。
把它拖入工程替换原有的.a,再运行就没有问题了。

以上问题就解决了,这里总结一些lipo命令:
1.依次查看所有需要合并的lib库所支持的框架类型
lipo -info xxx.a

2.将lib库拆分出不同类型的.a(armv7、armv7s、i386等)(i386表示支持模拟器)
lipo xxx.a -thin arm64 -output xxx.a
lipo xxx.a -thin armv7s -output xxx.a

3.删除.a库中的.o
ar -d xxx.a xxx.o

4.分离出目标文件(.o)
ar -x ../xxx.a

5.从.o文件中合并成静态库:
libtool -static -o ../xxx.a *.o

6.合并静态库
lipo -create 111.a 222.a 333.a -output 444.a
(表示将111.a、222.a、333.a合并成444.a)

相关文章

  • 解决iOS静态库文件冲突

    iOS 静态库冲突 两个不同的.o 文件冲突 ,静态库分离

  • lib(a)导致的duplicate symbol的问题

    链接: IOS lib(.a)库冲突解决办法 iOS 两个静态库存在同名文件冲突解决方案 说明 首先你要确定是这个...

  • iOS 静态库.a冲突解决

    以前我是有过专门做SDK的经验,所以像这种sdk报错遇到的不少,如图有价值也很明显的问题点在于: 这种问题一般都是...

  • iOS应用程序瘦身的静态库解决方案

    iOS应用程序瘦身的静态库解决方案 iOS应用程序瘦身的静态库解决方案

  • iOS 解决.a 静态库冲突问题

    今天碰到恶心的libSBJSON.a(千度公司出品) 和ArcGIS 冲突了和它们聊过之后它们决定不改。那只有自己...

  • 静态库冲突解决

    一、设置other linker flags参数 other linker flags作用 C代码到可执行文件经历...

  • Git(二)

    一. 静态库符号冲突解决 1.1 链接同名静态库会不会冲突? 首先打开第一份工程LGTestApp,导入了AFNe...

  • iOS 静态库

    iOS 静态库 iOS 静态库

  • iOS 静态库冲突 解决方案

    1、查看静态库支持的架构 2、拆分,将冲突的架构依次拆分 3、 拆分结果 4、选择冲突的架构,查看冲突架构包含的....

  • 解决静态库冲突问题

    最近在写公司的智能家居项目时碰到静态库冲突问题,我和公司另外一个同事折腾了几天终于弄出来了, 太坑人..........

网友评论

      本文标题:iOS 静态库.a冲突解决

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