組件22-二進(jìn)制:靜態(tài)庫(kù)(.a)的生成和測(cè)試

一、生成靜態(tài)庫(kù)的大步驟:

  1. 創(chuàng)建項(xiàng)目選擇靜態(tài)庫(kù)(.a)


    Snip20170713_7.png
  2. 設(shè)置需要暴漏的頭文件:TARGETS-->Build Phases-->Copy Files-->把需要暴漏的頭文件添加進(jìn)來(lái)即可


    .h文件路徑
  3. 分別在模擬器和真機(jī)環(huán)境下編譯(得到模擬器環(huán)境下的靜態(tài)庫(kù),debug版本);

模擬器和真機(jī)切換

二、靜態(tài)庫(kù)的測(cè)試

  1. 使用模擬器的靜態(tài)庫(kù), 拖入測(cè)試工程。見下圖iPhone6測(cè)試結(jié)果。
  2. 測(cè)試結(jié)果分析:模擬器iphone6可以成功,5則報(bào)錯(cuò)。
  • 模擬器和真機(jī)下的編譯成的靜態(tài)庫(kù)不能共用;
  • 模擬器之間,真機(jī)之間,編譯的靜態(tài)庫(kù)也不能共用;
  • 主要原因是CPU架構(gòu)不一樣。
  1. 注意靜態(tài)庫(kù)所支持的架構(gòu)
  • 不同機(jī)型的CPU, 對(duì)應(yīng)的架構(gòu)不同;
  • 模擬器:
    • 4s----5 : i386
    • 5s----7Plus : x86_64
  • 真機(jī):
    • 3gs---4s : armv7
    • 5/5c : armv7s(armv7兼容armv7s)
    • 5s---7Plus: arm64
  • 查看靜態(tài)庫(kù)支持的架構(gòu)
    • lipo -info 庫(kù)文件 (1.把庫(kù)文件拖入2.或者進(jìn)入到庫(kù)的文件夾下,輸入庫(kù)名)
  • 怎樣一次編譯支持多個(gè)架構(gòu)的的靜態(tài)庫(kù)?
    • 問題描述:正常情況下, 需要選中每一個(gè)模擬器進(jìn)行編譯, 生成支持對(duì)應(yīng)架構(gòu)的靜態(tài)庫(kù). 然后合并; 非常蛋疼。
    • 解決方案:Build Settings -> Build Active Architecture Only -> NO,(表示不止編譯活躍的架構(gòu),讓所有的架構(gòu)都編譯)
    • 對(duì)比Build Active Architecture Only的不同靜態(tài)庫(kù)信息
iPhone6測(cè)試結(jié)果.png

三、靜態(tài)庫(kù)文件的版本

  1. 調(diào)試版本
  • 真機(jī)-Debug版本
  • 模擬器-Debug版本
  • 特點(diǎn):調(diào)試版本會(huì)包含完整的符號(hào)信息,以方便調(diào)試
  1. 發(fā)布版本
  • 真機(jī)-Release版本
  • 模擬器-Release版本
  • 特點(diǎn):經(jīng)過優(yōu)化、大小略小、執(zhí)行速度快些但無(wú)顯著提升。
  1. 如何生成Debug和Release版本?
    項(xiàng)目 -> Edit Scheme -> Run -> Release/Debug 分別進(jìn)行編譯

  2. 靜態(tài)庫(kù),可以在模擬器和真機(jī)上運(yùn)行,怎么做?

  • 模擬器和真機(jī)CPU構(gòu)架不同,所以沒法同時(shí)運(yùn)行;

  • 解決方案:合并

    • 檢測(cè).a的類型:$ lipo -info libCZTools.a

    • 合并.a:lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a

    • 特點(diǎn):

      1. 合并.a的好處,開發(fā)過程中既可以在真機(jī)上調(diào)試,也可以在模擬器上調(diào)試;
      2. 合并.a的壞處,如果靜態(tài)庫(kù)太大,合并打包后,會(huì)非常大,因此很多第三方的靜態(tài)庫(kù)的.a是區(qū)分版本的;
      3. 今后在使用.a時(shí)一定注意版本。
  • 補(bǔ)充:庫(kù)的拆解:

    • lipo -thin 架構(gòu)名稱 架構(gòu)路徑 -output 目標(biāo)路徑
    • fat庫(kù)的拆解.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. 靜態(tài)庫(kù)的簡(jiǎn)介 庫(kù)所謂庫(kù), 就是講程序代碼集合, 封裝為一個(gè)庫(kù)文件, 他是共享代碼的一種方式, 可以將自己的代...
    面糊閱讀 873評(píng)論 0 49
  • 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù) 一、靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式 靜態(tài)庫(kù): .a 和 .framework 動(dòng)態(tài)庫(kù): .dylib 和...
    草原烈鷹閱讀 1,216評(píng)論 0 4
  • 簡(jiǎn)介 什么是庫(kù)? 庫(kù)是程序代碼的集合,是共享程序代碼的一種方式 根據(jù)源代碼的公開情況,庫(kù)可以分為2種類型 開源庫(kù) ...
    JonesCxy閱讀 605評(píng)論 0 0
  • 這幾天公司有一個(gè)新的需求,就是要將我們開發(fā)的某些東西都抽取出來(lái),打個(gè)比方我們開發(fā)了A項(xiàng)目,可以以后B項(xiàng)目要包含A項(xiàng)...
    黃魚兒啦啦啦閱讀 6,407評(píng)論 2 16
  • 自從我的那顆大牙掉落后,隔三差五地發(fā)炎,一直攪得我心煩意亂,讓我茶飯不思,每天捂著半個(gè)腫脹的臉,害的我爹啊、娘啊...
    ladybird628閱讀 752評(píng)論 0 0

友情鏈接更多精彩內(nèi)容