你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS lib(.a)庫沖突解決辦法

IOS lib(.a)庫沖突解決辦法

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


1.依次查看lib庫所支持的框架類型。i386:模擬器,armv7:iphone4,armv7s:iphone5,iphone5s,arm64:iphone6,iphone6p

 

1 robindeMacBook-Pro-2:testlib robin$ lipo -info lib.a 
2 Architectures in the fat file: lib.a are: armv7 armv7s arm64 
3 robindeMacBook-Pro-2:testlib robin$ 
fat file:表示該lib庫文件中合並了多個框架的lib庫,這裡合並的有armv7 armv7s arm64。如果同時合並了模擬器的lib庫,這裡還會有i386的標識。

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

 

 

1 robindeMacBook-Pro-2:testlib robin$ lipo -extract_family armv7 -output lib_armv7.a lib.a 
2 robindeMacBook-Pro-2:testlib robin$ 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 robindeMacBook-Pro-2:testlib robin$ lipo lib_armv7.a -thin armv7 -output lib_final_armv7.a
2 robindeMacBook-Pro-2:testlib robin$ lipo lib_armv7.a -thin armv7s -output lib_final_armv7s.a
3 robindeMacBook-Pro-2:testlib robin$ 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 robindeMacBook-Pro-2:testlib robin$ 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 robindeMacBook-Pro-2:testlib robin$ lipo lib.a -thin arm64 -output lib_final_arm64.a
2 robindeMacBook-Pro-2:testlib robin$ 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 robindeMacBook-Pro-2:testlib robin$ lipo -extract_family i386 -output lib_final_i386.a lib.a
2 robindeMacBook-Pro-2:testlib robin$ 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 robindeMacBook-Pro-2:testlib robin$ mkdir armv7
2 robindeMacBook-Pro-2:testlib robin$ cd armv7
3 robindeMacBook-Pro-2:armv7 robin$ ar -x ../lib_final_armv7.a
其他同理

6.從分離出的.o中刪除沖突的.o,再將其余.o文件合並成lib(.o)

 

 

1 robindeMacBook-Pro-2:arm64 robin$ libtool -static -o ../libarmv7.a *.o
其他同理

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

 

 

1 robindeMacBook-Pro-2:testlib robin$ lipo -create -output libs.a libarmv7.a libarmv7s.a libarm64.a 
2 robindeMacBook-Pro-2:testlib robin$ lipo -info libs.a 
3 Architectures in the fat file: libs.a are: armv7 armv7s arm64


 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved