Other Linker Flags

鏈接器

從C代碼到可執(zhí)行文件經(jīng)歷的步驟是:

源代碼 > 預(yù)處理器 > 編譯器 > 匯編器 > 機(jī)器碼 > 鏈接器 > 可執(zhí)行文件

在最后一步需要把.o文件和C語(yǔ)言運(yùn)行庫(kù)鏈接起來(lái)茶鉴,這時(shí)候需要用到ld命令。源文件經(jīng)過(guò)一系列處理以后,會(huì)生成對(duì)應(yīng)的.obj文件,然后一個(gè)項(xiàng)目必然會(huì)有許多.obj文件,并且這些文件之間會(huì)有各種各樣的聯(lián)系届谈,例如函數(shù)調(diào)用。鏈接器做的事就是把這些目標(biāo)文件和所用的一些庫(kù)鏈接在一起形成一個(gè)完整的可執(zhí)行文件

通過(guò)這個(gè)流程你也應(yīng)該知道為什么在編譯的過(guò)程中沒(méi)事而在運(yùn)行的時(shí)候就會(huì)報(bào)錯(cuò)了. 那我們?yōu)槭裁匆O(shè)置Other Linker Flags呢 因?yàn)镺ther Linker Flags其實(shí)就是鏈接器工作時(shí)除了默認(rèn)參數(shù)外的其他參數(shù)。

閃退的原因

蘋果官方Q&A上有這么一段話:

The “selector not recognized” runtime exception occurs due to an issue between the implementation of standard UNIX static libraries, the linker and the dynamic nature of Objective-C. Objective-C does not define linker symbols for each function (or method, in Objective-C) - instead, linker symbols are only generated for each class. If you extend a pre-existing class with categories, the linker does not know to associate the object code of the core class implementation and the category implementation. This prevents objects created in the resulting application from responding to a selector that is defined in the category.

翻譯:運(yùn)行時(shí)的異常時(shí)由于靜態(tài)庫(kù),鏈接器,與OC語(yǔ)言的動(dòng)態(tài)的特性之間的問(wèn)題,OC語(yǔ)言并不是對(duì)每一個(gè)函數(shù)或者方法建立符號(hào)表,而只是對(duì)每一個(gè)類創(chuàng)建了符號(hào)表.如果一個(gè)類有了分類,那么鏈接器就不會(huì)將核心類與分類之間的代碼完成進(jìn)行合并,這就阻止了在最終的應(yīng)用程序中的可執(zhí)行文件缺失了分類中的代碼,這樣函數(shù)調(diào)用接失敗了.

我自己的理解:鏈接器在鏈接文件時(shí)航缀,只會(huì)生成類符號(hào)表,而在有分類時(shí)堰怨,因?yàn)轭惷嗤嬗瘢跃捅A袅艘粋€(gè),固而分類與核心類之間就沒(méi)有完成代碼合并备图,從而造成函數(shù)調(diào)用失敗灿巧。

ObjC

一般這個(gè)參數(shù)足夠解決前面提到的問(wèn)題,這個(gè)flag告訴鏈接器把庫(kù)中定義的Objective-C類和Category都加載進(jìn)來(lái)。這樣編譯之后的app會(huì)變大,因?yàn)榧虞d了很多不必要的文件而導(dǎo)致可執(zhí)行文件變大揽涮。但是如果靜態(tài)庫(kù)中有類和category的話只有加入這個(gè)flag才行,但是Objc也不是萬(wàn)能的,當(dāng)靜態(tài)庫(kù)中只有分類而沒(méi)有類的時(shí)候,Objc就失效了,這就需要使用-all_load或者-force_load了抠藕。

-all_load

-all_load會(huì)強(qiáng)制鏈接器把目標(biāo)文件都加載進(jìn)來(lái),即使沒(méi)有objc代碼蒋困。但是這個(gè)參數(shù)也有一個(gè)弊端,那就是你使用了不止一個(gè)靜態(tài)庫(kù)文件幢痘,那么你很有可能會(huì)遇到ld: duplicate symbol錯(cuò)誤,因?yàn)椴煌膸?kù)文件里面可能會(huì)有相同的目標(biāo)文件 這里會(huì)有兩種方法解決 1:用命令行就行拆包. 2:就是用下面的這個(gè)參數(shù)

-force_load

這個(gè)flag所做的事情跟-all_load其實(shí)是一樣的家破,只是-force_load需要指定要進(jìn)行全部加載的庫(kù)文件的路徑颜说,這樣的話,你就只是完全加載了一個(gè)庫(kù)文件汰聋,不影響其余庫(kù)文件的按需加載 .

總結(jié)

別人建議ObjC與force_load搭配使用比較好.? 但是我自己目前用到ObjC的多一些门粪,這篇文章也是自己在看東西的時(shí)候突然想起,從而查的烹困。希望對(duì)看到的人有幫助玄妈。我也還需要再深入的學(xué)習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末髓梅,一起剝皮案震驚了整個(gè)濱河市拟蜻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枯饿,老刑警劉巖酝锅,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奢方,居然都是意外死亡搔扁,警方通過(guò)查閱死者的電腦和手機(jī)爸舒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稿蹲,“玉大人扭勉,你說(shuō)我怎么就攤上這事】疗福” “怎么了涂炎?”我有些...
    開(kāi)封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)设哗。 經(jīng)常有香客問(wèn)我唱捣,道長(zhǎng),這世上最難降的妖魔是什么熬拒? 我笑而不...
    開(kāi)封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任爷光,我火速辦了婚禮垫竞,結(jié)果婚禮上澎粟,老公的妹妹穿的比我還像新娘。我一直安慰自己欢瞪,他們只是感情好活烙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著遣鼓,像睡著了一般啸盏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骑祟,一...
    開(kāi)封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天回懦,我揣著相機(jī)與錄音,去河邊找鬼甚淡。 笑死瞬哼,一個(gè)胖子當(dāng)著我的面吹牛舞蔽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播舟茶,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼堵第!你這毒婦竟也來(lái)了吧凉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤踏志,失蹤者是張志新(化名)和其女友劉穎阀捅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體针余,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡也搓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年赏廓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傍妒。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幔摸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颤练,到底是詐尸還是另有隱情既忆,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布嗦玖,位于F島的核電站患雇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宇挫。R本人自食惡果不足惜苛吱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望器瘪。 院中可真熱鬧翠储,春花似錦、人聲如沸橡疼。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)欣除。三九已至住拭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間历帚,已是汗流浹背滔岳。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挽牢,地道東北人谱煤。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像卓研,于是被迫代替她去往敵國(guó)和親趴俘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • 摘要: 在ios開(kāi)發(fā)過(guò)程中奏赘,有時(shí)候會(huì)用到第三方的靜態(tài)庫(kù)(.a文件)寥闪,然后導(dǎo)入后發(fā)現(xiàn)編譯正常但運(yùn)行時(shí)會(huì)出現(xiàn)selec...
    陳云峰閱讀 147評(píng)論 0 0
  • 靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別 首先來(lái)看什么是庫(kù)疲憋,庫(kù)(Library)說(shuō)白了就是一段編譯好的二進(jìn)制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 11,931評(píng)論 3 42
  • 背景在iOS開(kāi)發(fā)過(guò)程中梁只,有時(shí)候會(huì)用到第三方的靜態(tài)庫(kù)(.a文件)缚柳,然后導(dǎo)入后發(fā)現(xiàn)編譯正常但運(yùn)行時(shí)會(huì)出現(xiàn)selecto...
    petry閱讀 984評(píng)論 0 1
  • 在ios開(kāi)發(fā)過(guò)程中埃脏,有時(shí)候會(huì)用到第三方的靜態(tài)庫(kù)(.a文件),然后導(dǎo)入后發(fā)現(xiàn)編譯正常但運(yùn)行時(shí)會(huì)出現(xiàn)selector ...
    Baby小豬閱讀 319評(píng)論 0 7
  • 在iOS開(kāi)發(fā)過(guò)程中秋忙,有時(shí)候會(huì)用到第三方的靜態(tài)庫(kù)(.a文件)彩掐,然后導(dǎo)入后發(fā)現(xiàn)編譯正常但運(yùn)行時(shí)會(huì)出現(xiàn)selector ...
    iCoders閱讀 500評(píng)論 0 1