問題背景
場景1
第三方庫中引用的庫(一般是源碼形式)與自己項目引入的三方庫沖突
解決方案
刪除項目中的第三方庫引用即可
場景2
項目中引用的多個第三方庫出現沖突,某些.o文件重復報錯
解決方案
這種無法通過直接刪除重復文件的方式,只能通過對第三方庫進行拆解,刪除重復的.o文件,再重新合并成新的靜態庫,替換原有的靜態庫即可
具體的操作步驟如下:
lipo -info libexample.a
通過這個命令可以解析出來.a中包含哪些平臺,一般如果有fat file
,表示支持多個平臺
類似: Architectures in the fat file: libexample.a are: i386 armv7 armv7s x86_64 arm64
下面就是解包,打包操作了,以arm64平臺為例:
- 創建臨時文件
arm64
,用來存放解壓后的.o文件:mkdir arm64
- 取出
arm64
平臺的包:lipo libexample.a -thin arm64 -output arm64/libexample_arm64.a
- 檢查庫中所包含的文件列表:
cd arm64 && ar -t libexample_arm64.a
- 解壓出
object file
文件(含有.o后綴的):ar xv libexample_arm64.a
- 根據報錯提示,找到要刪除的.o文件刪掉:
rm xxx.o
- 重新打包
object file
生成.o
文件:cd .. && ar rcs libexample_arm64.a arm64/*.o
- 將其他平臺按照1-6步驟進行拆解和刪除重復文件
- 將多個平臺的
.a
文件進行合并成新的.a
文件:lib -create libexample_arm64.a libexample_i386.a libexample_armv7 libexample_armv7s libexample_new.a
- 用
libexample_new.a
替換原來的libexample.a
即可
其他重復的庫采用同樣的方式處理