1. 程式人生 > >iOS報錯:linker command failed with exit code 1 (use -v to see invocation)尋找答案之旅

iOS報錯:linker command failed with exit code 1 (use -v to see invocation)尋找答案之旅

iOS報錯:linker command failed with exit code 1 (use -v to see invocation

錯誤出現

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格式。
解決問題步驟:

  1. 檢查出問題的靜態庫是否支援arm64格式,比如例子中的 是微信SDK,進入微信SDK靜態庫目錄,在終端執行命令
    lipo -info 出現的結果包含arm64即是支援,因此不是靜態庫的原因。

  2. 檢視專案配置:
    1).檢視專案的構建是否包含arm64
    build setting

    的Architecture中配置如下:
    在這裡插入圖片描述
    2)、連結flag
    在這裡插入圖片描述

  3. 另一種網上的解決方法說是與快取的庫衝突了,刪除快取的庫就行,根據錯誤提示取到快取的資料夾:
    /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/