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];
  • 相关阅读:
    StarUML中时序图
    HTML5/jQuery雷达动画图表 图表配置十分简单
    AspNetPager样式以及属性帮助文档
    IE浏览器img不显示解决
    php表单提交--文件
    javascript继承---组合式继承
    javascript继承--原型链的 继承
    【转】JavaScript 之arguments、caller 和 callee 介绍
    Array对象
    android 系统提示对话框(AlertDialog)的使用
  • 原文地址:https://www.cnblogs.com/xianfeng-zhang/p/9640113.html
Copyright © 2011-2022 走看看