1、bug產生
應用第三方靜態庫之后提示沖突錯誤:
2、bug分析
一般會提示哪兩個庫沖突:
CameraShowGLView.o是自己創建的類編譯生成的;
libLechangeSDK.a是添加的靜態庫。
定位文件后,需要找出沖突的方法或者全局屬性,改變自己文件的屬性就可以了!
后來發現是CameraShowGLView.m文件中一個枚舉搞得,因為這兩個都是攝像頭相應的文件,說明在libLechangeSDK.a中也有相同的枚舉聲明!把uniforms加個前綴或者后綴就OK了!以后寫靜態庫一定養成加前綴的習慣!
// Uniform index. enum { UNIFORM_VIDEOFRAME, UNIFORM_INPUTCOLOR, UNIFORM_THRESHOLD, NUM_UNIFORMS }; GLint uniforms[NUM_UNIFORMS];
3、查看.o靜態庫方法名
3.1 lipo -info 文件路徑:查看靜態庫的支持信息
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方法進行搜索:
發現還真有,還有其他方法名也有沖突,不過我改了這一個就沒事了,感覺是全局變量的緣故!
4、修改沖突地方
當然只能改自己文件的內容了:(我加了后綴1就ok了)
// Uniform index. enum { UNIFORM_VIDEOFRAME, UNIFORM_INPUTCOLOR, UNIFORM_THRESHOLD, NUM_UNIFORMS }; GLint uniforms1[NUM_UNIFORMS];