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


    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];
  • 相关阅读:
    各类运算符练习
    用if语句把24小时制转换成12小时制
    Android课程---优化ListView列表视图
    Android课程---关于ListView列表视图的学习
    Android课程---时间日期对话框
    Android课程---关于对话框的学习
    Android课程---用进度条改变图片透明度
    Android课程---进度条及菜单的学习
    Android课程---final关键字
    Android课程---日历选择器和时间选择器
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/9640113.html
Copyright © 2020-2023  润新知