問(wèn)題場(chǎng)景
iOS 端在集成騰訊云視頻服務(wù)客戶端音視頻SDK時(shí),與開發(fā)者自己工程中的第三方庫(kù)沖突,導(dǎo)致編譯報(bào)錯(cuò)。
解決方法
場(chǎng)景1
編譯報(bào)dumplicate symbols錯(cuò)誤。

解決辦法
一般是因?yàn)?other linker flags 設(shè)置了-all_load,去掉這個(gè),只需要設(shè)置-ObjC。
場(chǎng)景2
ffmpeg 和 ijk 相關(guān)沖突。
解決辦法
全功能專業(yè)版和獨(dú)立播放器版、企業(yè)版等版本中都包含有 ffmpeg 和 ijkplayer,如果您的項(xiàng)目中已經(jīng)包含相關(guān)開源庫(kù),推薦使用 精簡(jiǎn)版 或 符號(hào)重命名版。
場(chǎng)景3
工程里面與 TXLiteAVSDK 內(nèi)部引用的庫(kù)重復(fù)。
解決辦法
直接刪除本地工程里面重復(fù)的庫(kù)文件。
場(chǎng)景4
工程里面三方庫(kù)與TXLiteAVSDK有相同的.o文件。

解決辦法
這種情況發(fā)生在不能直接刪除對(duì)應(yīng)的三方庫(kù)場(chǎng)景,那么可以刪除這個(gè)三方庫(kù)里面沖突的.o文件然后重新打包,就不會(huì)沖突了。
命令行:
lipo -info libexample.a
如提示fat file,代表這個(gè)包是支持多平臺(tái)的,需要逐一解包然后重打包。
例如:Architectures in the fat file: libexample.a are: i386 armv7 armv7s x86_64 arm64
那么我們需要重復(fù)5次以下步驟。
解包、打包步驟:
- 創(chuàng)建臨時(shí)文件夾,用于存放解壓后的.o文件,如i386:
mkdir i386 - 取出i386平臺(tái)的包:
lipo libexample.a -thin i386 -output i386/ libexample-i386.a - 查看庫(kù)中所包含的文件列表:
cd i386 && ar -t libexample-i386.a - 解壓出 object file(.o后綴文件):
ar xv libexample-i386.a - 找到要?jiǎng)h除的包(someframework.o)刪掉:
rm someframework.o - 重新打包object file:
cd .. && ar rcs libexample-i386.a i386/*.o,可再次輸入[2-5]中的命令檢驗(yàn)是否刪除成功 - 將其他幾個(gè)平臺(tái)包逐一做上述[1-6]操作
- 重新合并為fat file的.a文件:
lipo -create libexample-armv7.a libexample-armv7s.a libexample-i386.a -output libexample-new.a
原理
lipo是管理Fat File的工具, 可以查看cpu架構(gòu), 提取特定架構(gòu),整合和拆分庫(kù)文件。
- lipo -info xxxx.framework
查看信息 - lipo -create xxxx xxxx -output xxxx
整合成Fat文件 - lipo xxxx -thin cpu(armv7/arm64等) -output xxxx
提取特定的cpu架構(gòu)的thin文件 - lipo -remove cpu(armv7/arm64等) xxxx -output xxxx
移除掉特定的cpu架構(gòu)的文件