問題
集成項(xiàng)目SDK的時(shí)候用到公司的兩個(gè)靜態(tài)庫,在沒有添加other link flags -ObjC
之前,編譯運(yùn)行一切正常贯莺。一旦加上這個(gè)配置項(xiàng)后就報(bào)duplicate symbol錯(cuò)誤风喇,在錯(cuò)誤描述中可以看到兩個(gè)靜態(tài)庫都包含來命名相同都.o
文件。
解決方案
- 由于都是公司提供的庫而且命名一樣缕探,決定對一個(gè)庫刪除對應(yīng)
.o
文件后重新打包靜態(tài)庫
- 首先根據(jù)錯(cuò)誤信息是arm64的庫沖突魂莫,所以解壓出arm64庫
1. lipo liba.a -thin arm64 -output liba-arm64.a #其中l(wèi)iba-arm64.a為抽離出來的庫文件
2. 創(chuàng)建一個(gè)新文件夾A糊肤,進(jìn)入該文件夾下面
3. ar -x liba-arm64.a完整路徑
4. 現(xiàn)在A文件夾中就有抽離出來的一堆.o文件來
- 在抽離后的文件夾中找到造成沖突的文件并刪除
- 刪除后重新打包庫
libtool -static -o 新的庫文件路徑/libarm64.a *.o
(該命令需要在A文件夾中進(jìn)行) - 抽離出其它庫文件(例如有armv7.a)衅金,然后合并靜態(tài)庫
lipo -creata -output liba.a armv7.a libarm64.a
- 用新合成的庫替換原先的庫