Targets
選項下有 Other linker flags
的設(shè)置萝映,用來填寫XCode的鏈接器參數(shù)甚疟,
如:-ObjC
, -all_load
, -force_load
等。
還記得我們在學習C程序的時候阿迈,從C代碼到可執(zhí)行文件經(jīng)歷的步驟是:
源代碼 -> 預處理器 -> 編譯器 -> 匯編器-> 機器碼 -> 鏈接器 -> 可執(zhí)行文件
在最后一步需要把.o
文件和C語言運行庫鏈接起來邻奠,這時候需要用到ld
命令。源文件經(jīng)過一系列處理以后间校,會生成對應的.obj
文件,然后一個項目必然會有許多.obj
文件页慷,并且這些文件之間會有各種各樣的聯(lián)系憔足,例如函數(shù)調(diào)用。鏈接器做的事就是把這些目標文件和所用的一些庫鏈接在一起形成一個完整的可執(zhí)行文件酒繁。
那么滓彰,Other linker flags
設(shè)置的值實際上就是ld
命令執(zhí)行時后面所加的參數(shù)。
下面逐個介紹3個常用參數(shù):
-
-ObjC
加了這個參數(shù)后州袒,鏈接器就會把靜態(tài)庫中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中
-
-all_load
會讓鏈接器把所有找到的目標文件都加載到可執(zhí)行文件中揭绑,但是千萬不要隨便使用這個參數(shù)!假如你使用了不止一個靜態(tài)庫文件郎哭,然后又使用了這個參數(shù)他匪,那么你很有可能會遇到ld: duplicate symbol
錯誤,因為不同的庫文件里面可能會有相同的目標文件彰居,所以建議在遇到-ObjC
失效的情況下使用-force_load
參數(shù)诚纸。
-
-force_load
所做的事情跟-all_load其實是一樣的,但是-force_load需要指定要進行全部加載的庫文件的路徑陈惰,這樣的話畦徘,你就只是完全加載了一個庫文件,不影響其余庫文件的按需加載
關(guān)于連接器詳細介紹, 請查看: 轉(zhuǎn)載原文