IOS lib a 庫衝突解決辦法

2021-08-17 07:45:47 字數 2924 閱讀 8034

在引入第三方lib(.a)庫時,經常會由於第三方lib庫中又引入同你現有工程相同的開源**而造成.o衝突,最近在整合漢王名片識別時發生asihttp的.o衝突。我想說的是像這種開源的使用率很高的源**本不應該包含在lib庫中,就算是你要包含那也要改個名字是吧。不過沒辦法現在人家既然包含,我們就只有想辦法分離了。

1.依次檢視lib庫所支援的框架型別。i386:模擬器,armv7:iphone4,armv7s:iphone5,iphone5s,arm64:iphone6,iphone6p。

1 admin-imac:testlib admin$ lipo -info

lib.a

2 architectures in the fat file

: lib.a are: armv7 armv7s arm64

3 admin-imac:testlib admin$

fat file:表示該lib庫檔案中合併了多個框架的lib庫,這裡合併的有armv7 armv7s arm64。如果同時合併了模擬器的lib庫,這裡還會有i386的標識。

2.分離出armv7,armv7s型別的.a庫

1 admin-imac:testlib admin$ lipo -extract_family armv7 -output lib_armv7.a lib.a 

2 admin-imac:testlib admin$ lipo -info

lib_armv7.a

3 architectures in the fat file: lib_armv7.a are: armv7 armv7s

檢視發現分離出來的lib_armv7.a仍舊是fat檔案,只有non-fat檔案才可以分離.o。所以仍然需要進行進一步分離。

1 admin-imac:testlib admin$ lipo lib_armv7.a -thin armv7 -output lib_final_armv7.a

2 admin-imac:testlib admin$ lipo lib_armv7.a -thin armv7s -output lib_final_armv7s.a

3 admin-imac:testlib admin$ lipo -info

lib_final_armv7.a

4 input file lib_final_armv7.a is not a fat file

5 non-fat file

: lib_final_armv7.a is architecture: armv7

6 admin-imac:testlib admin$ lipo -info

lib_final_armv7s.a

7 input file lib_final_armv7s.a is not a fat file

8 non-fat file: lib_final_armv7s.a is architecture: armv7s

此時分離出來的已經是non-fat檔案了,才可進行分離.o。

3.分離arm64型別的.a庫

arm64是ios系統最新增加的框架,按照分離armv7,armv7s的方式無論如何都無法分離出arm64版本的non-fat檔案,經過多次試驗發現可以通過下面命令直接分離。

1 admin-imac:testlib admin$ lipo lib.a -thin arm64 -output lib_final_arm64.a

2 admin-imac:testlib admin$ lipo -info

lib_final_arm64.a

3 input file lib_final_arm64.a is not a fat file

4 non-fat file: lib_final_arm64.a is architecture: arm64

4.分離i386(模擬器)型別的.a庫

1 admin-imac:testlib admin$ lipo -extract_family i386 -output lib_final_i386.a lib.a

2 admin-imac:testlib admin$ lipo -info

lib_final_i386.a

3 input file lib_final_i386.a is not a fat file

4 non-fat file: lib_final_i386.a is architecture: i386

5.分離目標檔案.o

通過上面的分離則可將armv7、armv7s、arm64、i386框架的lib庫一一分離出來,接下來針對每個框架分別建立乙個資料夾用來儲存從.a庫中分離出來的.o檔案。下面以armv7為例:

1 admin-imac:testlib admin$ mkdir

armv7

2 admin-imac:testlib admin$ cd armv7

3 admin-imac:armv7 admin$ ar -x ../lib_final_armv7.a

其他同理

6.從分離出的.o中刪除衝突的.o,再將其餘.o檔案合併成lib(.o)

1 admin-imac:arm64 admin$ libtool -static -o ../libarmv7.a *.o
其他同理

7.合併最終的通用靜態庫

1 admin-imac:testlib admin$ lipo -create -output libs.a libarmv7.a libarmv7s.a libarm64.a 

2 admin-imac:testlib admin$ lipo -info

libs.a

3 architectures in the fat file: libs.a are: armv7 armv7s arm64

ios庫衝突解決辦法

1.報錯顯示 x.o檔案,在build phrase裡面搜尋這個類名,把顯示出來的那幾個 m檔案給remove掉 2.如果兩個靜態庫衝突的結構是相同的,可以考慮將兩個靜態庫拆分出來進行合併。檢視檔案的架構有哪些 lipo info libzbar.a architectures in the fat...

GitLab埠衝突 解決辦法

訪問gitlab,出現 502 gitlab在使用的過程中,會開啟80埠,如果80埠被其他的應用程式占用,則gitlab的該項服務不能使用,所以訪問gitlab會失敗。大多數皆是此問題。還要注意gitlab還要使用8080埠,因此要注意可以把gitlab埠改為別的無服務占用的埠。改gitlab埠 1...

雜湊儲存和衝突解決辦法

一 雜湊表的概念及作用 一般的線性表,樹中,記錄在結構中的相對位置是隨機的,即和記錄的關鍵字之間不存在確定的關係,因此,在 結構中查詢記錄時需進行一系列和關鍵字的比 較。這一類查詢方法建立在 比較 的基礎上,查詢的 效率依賴於查詢過 程中所進行的比較次數。理想的情況是能直接找到需要的記錄,因此必須在...