天天看點

Xcode編譯報錯duplicate symbol _base64Decode in:

如題,我的項目中用到了zBarSDK和微信SDK,然後編譯時報錯:

duplicate symbol _base64Decode in:

    /Users/Evan/Documents/work-fight/JdysrFight/fightGame/frameworks/runtime-src/proj.ios_mac/ios/wxSDK/libWeChatSDK.a(base64.o)

    /Users/Evan/Library/Developer/Xcode/DerivedData/fightGame-guhgqdxpcitnbxafrzzllmvwrjto/Build/Products/Debug-iphoneos/libcocos2d iOS.a(base64.o)

duplicate symbol _main in:

    /Users/Evan/Library/Developer/Xcode/DerivedData/fightGame-guhgqdxpcitnbxafrzzllmvwrjto/Build/Intermediates/fightGame.build/Debug-iphoneos/fightGame-mobile.build/Objects-normal/arm64/main.o

    /Users/Evan/Library/Developer/Xcode/DerivedData/fightGame-guhgqdxpcitnbxafrzzllmvwrjto/Build/Products/Debug-iphoneos/libcocos2d iOS.a(flatc.o)

ld: 2 duplicate symbols for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

原因:

意思就是在這兩個庫中都定義了_base64_encode,編譯器認為你重複定義了。至于為什麼編譯器認為重複定義,個人認為編譯器編譯全局變量時會根據名字進行編譯,會把相同名稱的全局變量編譯為相同變量,也就是多個編譯成一個,而編譯器認為這樣可能會引起錯誤,就提醒使用者這裡有錯。

解決方法:

删掉 TARGETS->Build Settings->other linker flag-> -all_load