項(xiàng)目中碰到一個問題,微信支付需要設(shè)置Other Linker Flags為ObjC、all_load,但是由于各種需求,需要在原本項(xiàng)目中導(dǎo)入并集成直播,至于為啥選中騰訊云互動直播我就不懂了,嘿嘿 畢竟這個還不是我一個小菜鳥能決定的。跑題了,騰訊云互動直播的工程配置設(shè)置Other Linker Flags只能設(shè)置為ObjC,好吧沖突來了,百度各種找找到了苦主force_load。網(wǎng)上各種都是force_load帶上靜態(tài)庫的路徑,但是都是報錯:
clang: error: unknown argument: '-force_load/Users/wbx/Desktop/wbxUser_3.0.1 2/wbx_user/OpenSDK1.7.7/libWeChatSDK.a'
解決方式:

看圖-force_load后面帶上路徑?jīng)]錯,但是寫法要注意,具體的看上圖。
問題解決了,下面順帶再重溫一遍ObjC、all_load、force_load。
對Other Linker Flags理解
在Other Linker Flags上設(shè)置flag用于創(chuàng)建一個用于靜態(tài)庫的鏈接器,在OC中并不是對每一個函數(shù)或者方法建立符號表,而只是對每一個類創(chuàng)建了符號表。如果一個類有了分類,那么鏈接器就不會將核心與分類之間的代碼完成進(jìn)行合并,這就阻止了在最終的應(yīng)用程序中的可執(zhí)行文件缺失了分類的代碼,這樣函數(shù)調(diào)用失敗了。
ObjC
ObjC是Other Linker Flags中的一個flag,用于把靜態(tài)庫中定義的OC與category都加載進(jìn)來。編譯后App會變大,因?yàn)榧虞d了很多不必要的文件而導(dǎo)致可執(zhí)行文件變大。如果靜態(tài)庫中有類和category的話需要加入ObjC這個flag才行,但是ObjC也不是萬能的,當(dāng)靜態(tài)庫中只有分類而沒有類的時候,ObjC就失效了,這就需要使用-all_load或者-force_load。
-all_load
-all_load會強(qiáng)制鏈接器把目標(biāo)文件都加載進(jìn)來,即使沒有OC代碼。但是這個參數(shù)也有一個弊端,那就是你使用了不止一個靜態(tài)庫文件的時候,你很有可能會遇到ld: duplicate symbol錯誤,因?yàn)椴煌膸煳募锩婵赡軙邢嗤哪繕?biāo)文件,解決辦法有兩個:1、用命令行拆包;2:使用-force_load
-force_load
這個flag所做的事情跟-all_load其實(shí)是一樣的,只是-force_load需要指定要進(jìn)行全部加載的庫文件的路徑,這樣的話,你就只是完全加載了一個庫文件,不影響其余庫文件的按需加載。(加入的方式看文章一開始的截圖)
總的就說這些吧,順便把我參考的一個很贊的帖子附上要看帖子點(diǎn)這里。如果有問題,可留言。