發表於2015/5/15 8:54:36 220人閱讀ios
分類: iOS objective-cobjective-c
版權歸Aaidong全部〜轉載需聲名〜 歡迎你們訪問:http://blog.csdn.net/aaidongxcode
clang: error: linker command failed with exit code 1 (use -v to see invocation) 的Xcode錯誤調試,在iOS開發中算是一個最多見的錯誤。可是出現這個錯誤的狀況卻有好多種,如下總結但願能夠對你們有點幫助。
狀況1:
當想用某個第三方類庫的時候(如SBJson),我直接把類庫文件copy到工程目錄裏面,而後一編譯就出現這樣錯誤(並非必定會出這樣錯誤),開始覺得是網上下載的類庫自己問題,因此從新找類庫或者其餘方式將它添加進去,只要不出錯就行,也一直沒有深刻了解根本問題,今天在給工程添加一個FMDB(SQLIte第三方類庫)文件編譯時又出現這種錯誤,一開始覺得工程問題,可是新建工程後仍是出現這個問題,通過網上查找,獲得瞭解決辦法;
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_FMDatabase", referenced from:
objc-class-ref in ViewController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
在網上獲得解決辦法是:
在工做左邊導航欄Target-->Build Phases-->compile Sources中,第三庫庫的全部.m文件都添加到裏面,而後編譯經過了;
對於以上錯誤,根據網友解答個人理解是:
咱們在使用這些第三方類庫文件時直接將其拖拽到工程之中,編譯的的時候Xcode也沒有自動引用,因此形成這樣錯誤,這就須要咱們手動添加。
http://blog.hsin.tw/2012/ios-dev-undefined-symbols-for-architecture-i386/
狀況2:
出現這種狀況極可能是,項目中引入了多個相同的文件。刪除一個就ok!
狀況3:
和2很相似。
說明有沒法準確找到的函數,函數有重複現象。
形成這個錯誤的緣由是我直接在 .h頭文件中實現了幾個函數,而後這個頭文件又被別的.c文件所引用,有實現的。
因此解決辦法是把實現的幾個函數單出一個.c文件裏去。這樣就ok了。
狀況4:
有可能你使用的某個第三方庫不支持arm64(或armv7s)
把 Valid Architectures 的值 去掉arm64
過程:
PROJECT --> Build Settings --> Architectures --> Valid Architectures 他的值原本是 arm64 armv7 armv7s 把armv64 去掉便可
一樣的操做
TARGETS --> Build Settings --> Architectures --> Valid Architectures 作一樣的修改
可是注意:這只是暫時解決了你的目前的編譯問題。(建議更換實現方法更爲穩當)
狀況5:
很奇葩的狀況啊,就是引用第三方的靜態庫.a 出現了問題. 在模擬器和真機引入的靜態庫是分開的!!!固然若是你的靜態庫作成了統一的,那就不會出現狀況5.
狀況6:
在xcode中新建了一個.c 不管寫什麼都會報
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決辦法:在Build settings->Linking->Other Linker Flags,添加屬性-all_load,試試。
狀況7:
把項目上傳到SVN倉庫上,而後再拉到本地編譯時出現以下錯誤
ld: library not found for -lxxxxxxxxxxxx
clang: error: linker command failed with exit code 1 (use -v to see invocation)
緣由:
SVN在上傳資源服務器時默認配置會把一些第三方的.a庫文件等給忽略了,而後就形成這樣的錯誤。
解決辦法:
配置global-ignores文件服務器