iOS(2):不同的静态库(.a)包含重复的文件

有时候项目中引用第三方库(.a文件)的时候,里面包含的文件,可能会与本地的某个同名文件冲突。这时候我们可以尝试将对应的.a文件解压,删除同名文件。
1.png

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文件夹

2.png

在终端上使用以下命令,分离出armv7.a文件
fangyu@LfydeMacBook-Pro file % lipo libsnn.a -thin armv7 -output armv7/armv7.a

3.png

查看该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

4.png

5. 找到想要删除的.o文件,删除即可。然后返回上层目录,运行以下命令,将剩下的文件重新打包成新的armv7.a

fangyu@LfydeMacBook-Pro file % ar rcs armv7.a armv7/*.o

5.png

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

6.png

这里为了方便区分,最后生成的是newLibsnn.a,也可以不改变文件名,用新的.a文件替换项目中的.a文件即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容