有时候项目中引用第三方库(.a文件)的时候,里面包含的文件,可能会与本地的某个同名文件冲突。这时候我们可以尝试将对应的.a文件解压,删除同名文件。
1. cd到.a文件所在目录
fangyu@LfydeMacBook-Pro ~ % cd /Users/fangyu/Desktop/file
2. 使用终端查看静态库的架构信息
fangyu@LfydeMacBook-Pro file % lipo -info libsnn.a
结果如下:
Architectures in the fat file: libsnn.a are: arm64 armv7 armv7s
3. 接下来分平台查看每个文件的信息(这里以armv7为例),先在当前目录创建一个armv7文件夹
在终端上使用以下命令,分离出armv7.a文件
fangyu@LfydeMacBook-Pro file % lipo libsnn.a -thin armv7 -output armv7/armv7.a
查看该armv7.a中所包含的文件列表
fangyu@LfydeMacBook-Pro file % ar -t armv7/armv7.a
__.SYMDEF SORTED
copy_c4_with_stride_arm.o
copy_c4_with_stride_arm64.o
snn_add_bias_arm.o
snn_add_bias_arm64.o
snn_add_bias_relu6_arm.o
snn_add_bias_relu6_arm64.o
snn_add_bias_relu_arm.o
snn_add_bias_relu_arm64.o
可以看到里面有一些.o文件,由于太多,这里只展示了一部分
4. 解压出armv7.a 中的.o文件,cd到armv7文件夹
fangyu@LfydeMacBook-Pro file % cd /Users/fangyu/Desktop/file/armv7
终端上输入以下命令,分离出所有.o文件
fangyu@LfydeMacBook-Pro armv7 % ar xv armv7.a
5. 找到想要删除的.o文件,删除即可。然后返回上层目录,运行以下命令,将剩下的文件重新打包成新的armv7.a
fangyu@LfydeMacBook-Pro file % ar rcs armv7.a armv7/*.o
6. 按以上方法,可以依次重新解压、打包新的arm64.a、armv7s.a
最后,将重新生成的arm64.a、armv7.a、armv7s.a合并成新的libsnn.a文件(我们一开始解压的.a文件)
fangyu@LfydeMacBook-Pro file % lipo -create armv7.a arm64.a armv7s.a -output newLibsnn.a
这里为了方便区分,最后生成的是newLibsnn.a,也可以不改变文件名,用新的.a文件替换项目中的.a文件即可