iOS 幾個命令輕鬆搞定三方庫衝突

2022-05-27 04:27:08 字數 3454 閱讀 9523

一. 準備工作

2. 工具: 命令列

二. wyshenqimid.framework/wyshenqimid靜態庫檔案裡面有什麼

1. unix 的靜態鏈結庫沒什麼神秘的,它就是個壓縮包,和平時比較常見的 zip 或 rar 之類的壓縮包一樣,只不過人家是用乙個叫 ar 的壓縮工具壓縮的而已。所以我們給它解壓縮一下,看看它裡面都有什麼。既然是用 ar 壓縮的,解壓自然也要用 ar 這個工具。

ar -x 會解壓在資料夾顯示 [如果不出錯也要 cd 到庫檔案目錄中才能真正解壓出檔案,而不是全路徑,見文末]

ar -t 在命令列輸出庫檔案內容

1 weep-yan:~ weepyan$ar -x/users/weepyan/desktop/wyshenqimid.framework/wyshenqimid 

2 ar: /users/weepyan/desktop/wyshenqimid.framework/wyshenqimid is afatfile (use libtool(1) or lipo(1) and ar(1

) on it)

這裡先解釋一下它為什麼這麼(fat)。在做 ios 開發時我們都知道可以用模擬器和真機來測試我們的專案,但是這兩個平台的架構是不一樣的,模擬器是 i386 x86_64 架構的,而我們的裝置是 armv7 arm64 架構的。當在製作靜態鏈結庫的時候也要針對不同的架構製作出針對真機和模擬器的兩個靜態鏈結庫,而當我們想在自己的專案中使用靜態鏈結庫的時候,如果在模擬器上執行我們要用針對模擬器的靜態庫版本,用真機裝置測試的時候還要切換到針對真機的靜態鏈結庫,這樣一來非常的麻煩。前面說過了靜態鏈結庫就是個壓縮包,那麼我們是否能將這兩個靜態鏈結庫壓縮成乙個靜態鏈結庫這樣就可以同時支援模擬器和真機裝置兩種架構了呢?答案是肯定的。[附:如何檢視和合併庫資訊]

2. 檢視庫檔案的架構,確實很(fat)。

1 weep-yan:~ weepyan$lipo -info/users/weepyan/desktop/wyshenqimid.framework/wyshenqimid 

2 architectures in thefatfile: /users/weepyan/desktop/wyshenqimid.framework/wyshenqimid are:armv7 i386 x86_64 arm64

3. 既然很(fat),那我們就要先給它**才能解壓,隨便從裡面抽出乙個架構的靜態鏈結庫來。

1 weep-yan:~ weepyan$lipo -thin i386/users/weepyan/desktop/wyshenqimid.framework/wyshenqimid-output/users/weepyan/desktop/wyshenqimid

4. 執行後在桌面會有乙個檔案生成,檢視架構確實**了。

1 weep-yan:~ weepyan$lipo -info/users/weepyan/desktop/wyshenqimid

2 input file /users/weepyan/desktop/wyshenqimid is

not a fatfile

3 non-fat file: /users/weepyan/desktop/wyshenqimid is architecture:i386

5. 現在我們再用ar命令解壓它看看裡面有什麼?(用 ar -t 僅檢視不解壓)

1 weep-yan:~ weepyan$ar -t/users/weepyan/desktop/wyshenqimid

2__.symdef sorted

3wycommonutil.o45

wykeychain.o

6wyshenqimid_vers.o

7 weep-yan:~ weepyan$

解壓完成後你會看到好多好多以.o結尾的物件檔案,這些物件檔案就是給鏈結器最終生成靜態鏈結庫時用到的檔案。

三. 使用 ar 命令刪除 ios 靜態庫重複編譯的 .o 檔案。

1. 使用 lipo 分別將.a拆分(3. **);

2. 使用 ar 命令刪除其中乙個 .a 的衝突的 .o;

3. 使用 lipo 合併;[附:如何檢視和合併庫資訊]

1 weep-yan:~ weepyan$ar -t/users/weepyan/desktop/wyshenqimid

2__.symdef sorted

3wycommonutil.o45

wykeychain.o

6wyshenqimid_vers.o

7 weep-yan:~weepyan$

8 weep-yan:~ weepyan$ar -

9ar: wyshenqimid: no such file or directory

11 weep-yan:~ weepyan$ar -t/users/weepyan/desktop/wyshenqimid

12__.symdef sorted

13wycommonutil.o

14wykeychain.o

15wyshenqimid_vers.o

16 weep-yan:~ weepyan$

這樣就刪除了 .o 檔案,對不同架構的庫重複操作,然後再合併就好了!

注意:如果檢視是使用 ar -x 檢視的一定要 cd 到目錄才能解壓檢視。

1 weep-yan:~ weepyan$ar -x/users/weepyan/desktop/wyshenqimid 

2 weep-yan:~ weepyan$cd/users/weepyan/desktop/

3 weep-yan:desktop weepyan$ar -xwyshenqimid

4 weep-yan:desktop weepyan$

這樣在桌面就能看到那些 .o 檔案了。

合併.o命令: libtool -static -o ./newname *.o

ar rc newname.a *.o

iOS 第三方庫

afnetworking 網路請求元件 fmdb 本地資料庫元件 sdwebimage 多個縮圖快取元件 uickeychainstore 存放使用者賬號密碼元件 reachability 監測網路狀態 datetools 友好化時間 mbprogresshud 一款提示框第三方庫 mwphotob...

IOS開發第三方庫

1.afnetworking 輕量級而又超級高效的ios網路程式設計框架,它支援ios5.0及以上版本。2.sstoolkit 非常簡單有用的工具,除了提供一些ui介面元素外,它還可以幫我們解決一些常見問題 3.gpuimage 4.socketrocket 5.hocketkit 可以使用它進行b...

iOS 第三方庫 FMDB

對sqlite api進行封裝的庫 fmdb同時相容arc和非arc工程,會自動根據工程配置來調整相關的記憶體管理 db fmdatabase databasewithpath database path 1 當資料庫檔案不存在時,fmdb會自己建立乙個。2 如果你傳入的引數是空串 則fmdb會在臨...