Q&A 八問: 靜態(tài)庫和動(dòng)態(tài)庫、armv7,armv7s,i386,x86_64架構(gòu)

今日upload package 到 itunes Connect 失敗了,原因是引入的一個(gè) .framework 包含了“有問題”的架構(gòu),orz...

何為“有問題”,以下是我一個(gè)初學(xué)者對(duì)其的學(xué)習(xí)和認(rèn)識(shí),總結(jié)如下:

Q1: 靜態(tài)庫和動(dòng)態(tài)庫是什么?
A1: 可復(fù)用代碼我們會(huì)封裝成函數(shù),多個(gè)這樣的函數(shù)我們會(huì)整合到一個(gè)或多個(gè)源文件作為工具“庫”,比如我們會(huì)把這些源文件放置到一個(gè) Utility 文件夾,然后在一個(gè)頭文件中,把允許外部調(diào)用的方法都聲明在此處;進(jìn)一步考慮,這些可復(fù)用函數(shù)依賴關(guān)系甚少,起碼和業(yè)務(wù)無關(guān),因此我們可以提前對(duì)這些源文件編譯成二進(jìn)制可執(zhí)行文件,當(dāng)工程需要用到的時(shí)候我們引入這個(gè)工具二進(jìn)制文件即可,而工程會(huì)根據(jù)前面說到的頭文件中聲明的函數(shù)進(jìn)行調(diào)用,最后整個(gè)工程在編譯的時(shí)候,由于我們工具庫已經(jīng)編譯成二進(jìn)制文件了,因此無須編譯,但是在link的時(shí)候需要將二進(jìn)制文件和目標(biāo)文件(比如 .o, .obj)link到一起。

Q2: 二進(jìn)制文件是什么?
A2: 所謂編譯就是把源文件.c .m等高級(jí)語言寫的程序經(jīng)過編譯器一系列處理步驟(預(yù)處理->詞法分析->語法分析->語義分析->中間語言IR生成->目標(biāo)代碼生成與優(yōu)化(生成的目標(biāo)代碼是asm匯編)-> 轉(zhuǎn)成機(jī)器語言,也就是CPU指令)),這么說來目標(biāo)文件就是存儲(chǔ)了0,1的數(shù)據(jù)塊,關(guān)鍵看CPU如何解釋這些0,1,是指令呢還是數(shù)據(jù)。

Q3: 何為Link?
A3: 編譯好的二進(jìn)制文件最后會(huì)和其他目標(biāo)文件link鏈接整合成一個(gè)二進(jìn)制文件。簡單來說,將一個(gè)個(gè)二進(jìn)制文件按照一定順序整合放置到一起,每個(gè)二進(jìn)制文件都不知道自己會(huì)放置在那個(gè)地址,但是二進(jìn)制內(nèi)部的指標(biāo)是確定的,因此我們會(huì)設(shè)置一個(gè)默認(rèn)的地址0x0000000,而內(nèi)部都是相對(duì)地址,當(dāng)link的時(shí)候我們會(huì)把預(yù)留的默認(rèn)地址改成正確的地址。

Q4: 靜態(tài)庫和動(dòng)態(tài)庫的區(qū)別?
A4: 兩者都是預(yù)先編譯好的,在編譯整個(gè)工程的時(shí)候,只對(duì)導(dǎo)入的靜態(tài)庫和動(dòng)態(tài)庫進(jìn)行l(wèi)ink操作;兩者的不同時(shí),靜態(tài)庫在編譯的時(shí)候會(huì)copy一份到最后的目標(biāo)二進(jìn)制執(zhí)行文件,而動(dòng)態(tài)庫則不會(huì),而只存儲(chǔ)指向動(dòng)態(tài)庫的引用。

Q5: 靜態(tài)庫和動(dòng)態(tài)庫在各平臺(tái)上的類型是什么?
A5: window下靜態(tài)庫.lib,動(dòng)態(tài)庫 dll;unix和類unix系統(tǒng)下靜態(tài)庫 .a,動(dòng)態(tài)庫.so;mac系統(tǒng)下靜態(tài)庫.a.framework,動(dòng)態(tài)庫 .dylib/.tbd

Q6:iOS 的 framework 是什么呢?
A6: framework其實(shí)是iOS/mac平臺(tái)自有的一種格式,其對(duì)二進(jìn)制庫,頭文件和資源進(jìn)行了封裝,便于分發(fā)和管理。系統(tǒng)的framework都是動(dòng)態(tài)庫,而自己開發(fā)的framework無論是動(dòng)態(tài)還是靜態(tài),都是要復(fù)制到目標(biāo)程序的,如此看來,貌似自己開發(fā)的都是“靜態(tài)庫”???蘋果稱之為 embedded framework。

Q7: armv7,armv7s,i386,x86_64架構(gòu),為何常說靜態(tài)庫包含了多種架構(gòu)?
A7: 上述都是指CPU的結(jié)構(gòu),支持的指令集。iPhone 的硬件配置幾乎每年都有更新,其中armv7可簡單理解為支持iPhone5之前的設(shè)備;而armv7s支持iPhone5之后的設(shè)備,arm64是更新的設(shè)備;i386和 x86_64 都是指PC的架構(gòu),前者是舊的mac,32位的,后者是64位。

Q8: 如何查看一個(gè)靜態(tài)庫包含哪些架構(gòu):
A8: 使用lipo -info library 命令,其他操作還有從已有庫中移除/添加/瘦包/,更多使用可用 man lipo 查看。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,530評(píng)論 3 416
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,759評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,204評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,415評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,955評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評(píng)論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,675評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,967評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容