iOS-集成多個SDK內(nèi)部文件重復沖突解決

最近使用Hbuilder集成一個項目,集成了很多sdk,發(fā)現(xiàn)有兩個sdk都是用了Masonry第三方庫布局,然后編譯報錯,關鍵字:duplicate symbol ,出現(xiàn)這個就表示有重復文件了,我們需要把其中的一個sdk文件中生成的重復的.o文件一一刪除即可,如下則為相關位置,我將把Masonry.framework的相關重復文件一一移除合并解決沖突問題。

1

步驟如下:

1.打開終端cd到所要修改的sdk所載文件目錄(最好備份一個出來,改完再替換)

2.查看靜態(tài)庫文件包含的架構(gòu):

命令: lipo -info? xxxx.a?

主要看看總共有哪些架構(gòu)有沖突,后面需要一一從相關架構(gòu)移除。如下

根據(jù)結(jié)果可以看出包含armv7 i386 x86_64? arm64?這幾個庫,沖突文件必須從必須從每個架構(gòu)的庫里面相應刪除才行,其中x86_64為模擬器的架構(gòu),如果不需要模擬器調(diào)試,嫌麻煩x86_64可以不管。具體指令集相關可以看這篇文章:http://www.itdecent.cn/p/5d1ce5d3d8d6

3.分離出相應架構(gòu)的庫:

命令:lipo -thin armv7 XYRiskAssessment-iOS-1.0.0.a -output armv7.a

例:lipo -thin armv7 Masonry -output Masonry-armv7

然后我們就可以看到我們的sdk目錄下會多一個Masonry-armv7的庫,如下:

3

同樣的方法我們可以分離出i386? x86_64? ?arm64 文件分離完成后如下:


4


4.查看庫中所包含的文件列表

命令為:ar -t? xxx.a

例:?ar -t? Masonry-armv7

4

5.如果不清楚兩個sdk都有哪些文件重復,可以按照以上步驟,查看下另一個重復的sdk都包含哪些文件,如下所示和Masonry.framework重復的DCUniVideoPublic.framework分離出armv7架構(gòu)的文件列表,其實也可以在xcode編譯重復信息里面找到相關.o文件,看個人喜好。

5

6.接著我們就要從每個架構(gòu)文件中,刪除相關的沖突.o文件

命令::ar -d -sv XXXXX-armv7.a? XXXX.o

例:

ar -d -sv Masonry-armv7 MASCompositeConstraint.o

ar -d -sv Masonry-armv7 MASViewConstraint.o

6

7.最后一步:把armv7?i386? x86_64? ?arm64 所有架構(gòu)的重復文件按照上面方法刪除完成后。我們要把這幾個架構(gòu)合并到原來的庫里面

和并靜態(tài)庫的命令:

lipo -create XXXXX-armv7.a XXXXX-armv7s.a (加上所有架構(gòu)的編譯庫) -output XXXXX-NOFfmpeg.a

例:

lipo -create Masonry-x86_64 Masonry-armv7 Masonry-i386 Masonry-arm64 -output Masonry

最后將這個新生成的靜態(tài)庫文件替換掉之前的,發(fā)現(xiàn)沖突解決。

注意:當把Masonry相關沖突.o文件移除后,這個移除合并后的兼容版本是不能單獨拿去使用的,單獨使用以上移除的.o文件會出現(xiàn)丟失的編譯錯誤,因為你已經(jīng)移除了。

覺得有幫助留個贊再走唄 ~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容