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];
  • 相关阅读:
    理解 RESTful:理论与最佳实践
    Shiro 性能优化:解决 Session 频繁读写问题
    单点登录的三种实现方式
    理解 Spring(二):AOP 的概念与实现原理
    理解 Spring(一):Spring 与 IoC
    MFC查内存泄漏方法
    024 --- 第28章 访问者模式
    023 --- 第27章 解释器模式
    022 --- 第26章 享元模式
    021 --- 第25章 中介者模式
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/9640113.html
Copyright © 2011-2022 走看看