zoukankan      html  css  js  c++  java
  • 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];
  • 相关阅读:
    ajax请求超时
    tp5去重统计某字段的数量
    html本地存储 localStorge
    json、obj转换
    关于数组的合并arr.push() arr.push.apply()
    curl内容
    js 回车键登录
    tp5 前置操作
    STL容器
    c++文件的读写
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/9640113.html
Copyright © 2011-2022 走看看