錯誤出現
Android開發程序員,接手了公司的iOS項目,接入了微信登錄,本來運行的好好的,後來檢查的時候看到微信接入官網說要注意是不是微信的最新版本,不是的話要更新,就使用cocodpod
更新了一下,然後就再也編譯不了了。。。。在此記錄一下,錯誤如下:
Undefined symbols for architecture arm64:
"operator delete[](void*)", referenced from:
+[WeChatApiUtil EncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil NsDataEncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeWithBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
"operator new[](unsigned long)", referenced from:
+[WeChatApiUtil EncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil NsDataEncodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeWithBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
+[WeChatApiUtil DecodeBase64:] in libWeChatSDK.a(WeChatApiUtil.o)
"___gxx_personality_v0", referenced from:
Dwarf Exception Unwind Info (__eh_frame) in AppDelegate.o
Dwarf Exception Unwind Info (__eh_frame) in main.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
問題分析
linker command failed with exit code 1 (use -v to see invocation) 出現的原因可能較多,根據提示往上查找原因: symbol(s) not found for architecture arm64,即靜態庫不支持arm64格式。
解決問題步驟:
-
檢查出問題的靜態庫是否支持arm64格式,比如例子中的 是微信SDK,進入微信SDK靜態庫目錄,在終端執行命令
lipo -info
出現的結果包含arm64即是支持,因此不是靜態庫的原因。 -
查看項目配置:
1).查看項目的構建是否包含arm64
在build setting
的Architecture中配置如下:
2)、鏈接flag
-
另一種網上的解決方法說是與緩存的庫衝突了,刪除緩存的庫就行,根據錯誤提示取到緩存的文件夾:
/Users/XXX/Library/Developer/Xcode/DerivedData 把這個路徑下的文件夾都刪除了,重新build ,還是不行。。。。
5.嘗試了以上方法都不可以,最後網上查找提示說是鏈接不到靜態庫,那重新pop一下總可以了吧,關閉項目,刪除原來的微信SDK,重新執行pod install,重新build,抱歉還是不可以。。。
最終解決方案
在buid phases
下link binary with libraries添加 libc++.tbd,重新執行build。
成功了!!!
參考:
[1]: http://www.111cn.net/sj/ios8/88348.htm
[2]: https://stackoverflow.com/questions/19213782/undefined-symbols-for-architecture-arm64?rq=13
[3]: http://www.cocoachina.com/ios/20170221/18737.html
[4]:https://blog.csdn.net/cheenbee/article/details/65437958 http://adrai.github.io/flowchart.js/