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

本文讨论了在iOS应用开发中遇到第三方库冲突问题的解决方案,通过分析冲突源和定位冲突方法,作者提出了修改文件内容以避免冲突的方法。包括使用lipo工具查看静态库信息、提取arm64架构、搜索冲突方法名,并通过修改方法名称中的前缀或后缀来解决冲突。
摘要由CSDN通过智能技术生成

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];

 

转载于:https://www.cnblogs.com/xianfeng-zhang/p/9640113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值