第一種方法:
以前在做項目的時候在Xcode中倒入一個三方SDK的時候,會有一些.a的靜態庫,這時候如果直接編譯運行就會報錯。當時只知道往build settings的linker flags 里面添加-force_load和.a文件的路徑。最近又多次用到,這里總結一下。
例如在Xcode中倒入一個SIPSKDK,如下,這里面包含了一個.a的靜態庫。
這里報錯的原因主要是Xcode找不到里面.a文件中的類,所以需要在build settings的linker flags 中添加-ObjC來告訴鏈接器,把庫中的類和category都加載進來,這樣編譯后app會變大,因為加載了其它的OC代碼進來。
而且如果.a靜態庫中只有分類沒有類的話這樣也不行。這時候就要在添加了-ObjC的基礎上再添加一行-all_load.
-all_load是專門處理-ObjC的一個bug的,用了-ObjC后,如果類庫中只有category,沒有類的話,這樣category還是加載不進來。這時候再加入-all_load就是告訴鏈接器強制把所有的目標文件都加載進來。但是這樣在導入多個.a文件的時候如果都這樣做,可能會導致你的目標程序大小增大,而且往往容易引起一些沖突,而這些沖突往往你無法解決(常常出現在你鏈接的各種庫中)。
這時候可以使用-force_load只加載你方法所需要的庫,但是使用它需要再添加.a文件的路徑。不需再添加-ObjC
所以比較好的解決辦法就是在build settings的linker flags中添加兩個:
第二種方法:
在集成第三方框架的時候 ,報了"_BIO_ctrl", referenced from:等一系列錯誤
-
沒有將兩個.a文件拖入工程。
-
找到iOS DEMO,將上圖紅框框住的兩個.a文件導入工程即可。