other link flags

一個程序從簡單易讀的代碼到可執(zhí)行文件往往要經(jīng)歷一下步驟:
源碼>預(yù)處理器>編譯器>匯編器>機(jī)器碼>鏈接器>可執(zhí)行文件
源文件經(jīng)過一系列處理后,會生成對應(yīng)的.obj文件,一個項目中會生成很多的.obj文件,且這些文件之間會有各種各樣的聯(lián)系。鏈接器要做的事情就是把這些.obj文件和所用的一些庫鏈接在一起形成一個完整的可執(zhí)行文件。鏈接器做了什么

ios開發(fā)中一般會用到幾個參數(shù)

  • -Objc
  • -all_load
  • -force_load

使用-Objc后,連接器就會把靜態(tài)庫中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中,這樣可能會因?yàn)榧虞d了很多不必要的文件導(dǎo)致可執(zhí)行文件變大。
當(dāng)靜態(tài)庫中只有分類而沒有類的時候,-Objc參數(shù)就會失效。這個時候就需要使用-all_load或者-force_load了。

-all_load會讓鏈接器把所有能找到的目標(biāo)文件都加載到可執(zhí)行文件中,但是千萬不要隨便使用這個參數(shù)!假如你使用了不止一個靜態(tài)庫文件,然后又使用了這個參數(shù),那么你很有可能會遇到ld:duplicate symbol錯誤,因?yàn)椴煌瑤煳募锩婵赡軙邢嗤哪繕?biāo)文件,建議在-Objc失效的情況下再使用-force_load參數(shù)。

-force_load所做的事情跟-all_load其實(shí)是一樣的,但是-force_load需要指定要進(jìn)行全部加載的庫文件的路徑,這樣的話,你就只是完全加載了一個庫文件,不影響其余庫文件的按需加載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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