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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM