iOS开发静态库冲突——如何查看静态库(.O)中方法名

一、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];
相关文章
相关标签/搜索