一、bug產生ios
應用第三方靜態庫以後提示衝突錯誤:架構
二、bug分析ide
通常會提示哪兩個庫衝突:spa
CameraShowGLView.o是本身建立的類編譯生成的;3d
libLechangeSDK.a是添加的靜態庫。code
定位文件後,須要找出衝突的方法或者全局屬性,改變本身文件的屬性就能夠了!orm
後來發現是CameraShowGLView.m文件中一個枚舉搞得,由於這兩個都是攝像頭相應的文件,說明在libLechangeSDK.a中也有相同的枚舉聲明!把uniforms加個前綴或者後綴就OK了!之後寫靜態庫必定養成加前綴的習慣!blog
// Uniform index. enum { UNIFORM_VIDEOFRAME, UNIFORM_INPUTCOLOR, UNIFORM_THRESHOLD, NUM_UNIFORMS }; GLint uniforms[NUM_UNIFORMS];
三、查看.o靜態庫方法名ip
3.1 lipo -info 文件路徑:查看靜態庫的支持信息io
lipo -info /Users/xxx/Desktop/libLechangeSDK.a
3.2 取出arm64架構(衝突報錯提示arm64,因此只去取arm64便可)
lipo -thin arm64 /Users/xxx/Desktop/libLechangeSDK.a -output /Users/xxx/Desktop/libLechangeSDK_arm64
3.3 取出arm64架構中libiosrender-VideoOpenGLES.o文件(根據報錯信息提取對應文件)
nm -A /Users/xxx/Desktop/libLechangeSDK_arm64 libiosrender-VideoOpenGLES.o
結果會發現輸出好多內容,我在CameraShowGLView.m文件中的取uniforms方法進行搜索:
發現還真有,還有其餘方法名也有衝突,不過我改了這一個就沒事了,感受是全局變量的緣故!
四、修改衝突地方
固然只能改本身文件的內容了:(我加了後綴1就ok了)
// Uniform index. enum { UNIFORM_VIDEOFRAME, UNIFORM_INPUTCOLOR, UNIFORM_THRESHOLD, NUM_UNIFORMS }; GLint uniforms1[NUM_UNIFORMS];