iOS開發靜態庫衝突——如何查看靜態庫(.O)中方法名

一、bug產生ios

  應用第三方靜態庫以後提示衝突錯誤:架構

 

二、bug分析ide

  通常會提示哪兩個庫衝突:spa

  CameraShowGLView.o是本身建立的類編譯生成的;3d

  libLechangeSDK.a是添加的靜態庫。code

  定位文件後,須要找出衝突的方法或者全局屬性,改變本身文件的屬性就能夠了!orm

後來發現是CameraShowGLView.m文件中一個枚舉搞得,由於這兩個都是攝像頭相應的文件,說明在libLechangeSDK.a中也有相同的枚舉聲明!把uniforms加個前綴或者後綴就OK了!之後寫靜態庫必定養成加前綴的習慣!blog

// Uniform index.
enum {
    UNIFORM_VIDEOFRAME,
    UNIFORM_INPUTCOLOR,
    UNIFORM_THRESHOLD,
    NUM_UNIFORMS
};
GLint uniforms[NUM_UNIFORMS];

 

三、查看.o靜態庫方法名ip

  3.1 lipo -info 文件路徑:查看靜態庫的支持信息io

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方法進行搜索:

  發現還真有,還有其餘方法名也有衝突,不過我改了這一個就沒事了,感受是全局變量的緣故!

 

四、修改衝突地方

  固然只能改本身文件的內容了:(我加了後綴1就ok了)

// Uniform index.
enum {
    UNIFORM_VIDEOFRAME,
    UNIFORM_INPUTCOLOR,
    UNIFORM_THRESHOLD,
    NUM_UNIFORMS
};
GLint uniforms1[NUM_UNIFORMS];
相關文章
相關標籤/搜索