IOS lib(.a)庫衝突解決辦法,ios.a

來源:互聯網
上載者:User

IOS lib(.a)庫衝突解決辦法,ios.a

  在引入第三方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.a2 admin-imac:testlib admin$ lipo lib_armv7.a -thin armv7s -output lib_final_armv7s.a3 admin-imac:testlib admin$ lipo -info lib_final_armv7.a4 input file lib_final_armv7.a is not a fat file5 Non-fat file: lib_final_armv7.a is architecture: armv76 admin-imac:testlib admin$ lipo -info lib_final_armv7s.a7 input file lib_final_armv7s.a is not a fat file8 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.a2 admin-imac:testlib admin$ lipo -info lib_final_arm64.a 3 input file lib_final_arm64.a is not a fat file4 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.a2 admin-imac:testlib admin$ lipo -info lib_final_i386.a 3 input file lib_final_i386.a is not a fat file4 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 armv72 admin-imac:testlib admin$ cd armv73 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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.