一、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];