-ObjC引起的duplicate symbols

在使用了靜態庫的情況下,如果在工程裏需要設置-ObjC,可能出現

<span style="font-size:14px;">duplicate symbol _OBJC_METACLASS_$_ReliableBurstData in:
    /Users/work/GP/GSDKDemo/Demo/...
    /Users/work/GP/GSDKDemo/GSDK.a/...
ld: 47 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)</span>
在Build Phases
Link Binary With Libraries 刪除衝突的庫
Compile Sources 刪除衝突的源碼

即可編譯成功


原因分析:

Other linker flags 對應ld命令執行時後面所加的參數

-ObjC:鏈接器就會把靜態庫中所有的.o文件都加載到可執行文件中(如果庫中和加載庫的程序有重複的文件,便會出現如上錯誤
-all_load:會讓鏈接器把所有找到的目標文件都加載到可執行文件中

-force_load:所做的事情跟-all_load其實是一樣的,但是-force_load需要指定要進行全部加載的庫文件的路徑,這樣的話,你就只是完全加載了一個庫文件,不影響其餘庫文件


解決辦法:

  • 加載方去除重複資源
  • 不使用-ObjC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章