linker command failed with exit code 1 (use -v to see invocation)這個錯誤貌似遇見並不止一次,當我想用某個第三方類庫的時候(如SBJson),我直接把類庫檔案copy到工程目錄裡面,然後一編譯就出現這樣錯誤(並不是一定會出這樣錯誤),開始以為是網上下載的類庫本身問題,所以重新找類庫或者其他方式將它新增進去,只要不出錯就行,也一直沒有深入瞭解根本問題,今天在給工程新增一個FMDB(SQLIte第三方類庫)檔案編譯時又出現這種錯誤,一開始以為工程問題,但是新建工程後還是出現這個問題,經過網上查詢,得到了解決辦法;
[cpp] view plaincopy
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檔案都新增到裡面,然後編譯通過了;
新增.m檔案
根據對比可以看見 in FMDBTest,FMDBTest的Target裡新增進去了了一些.m檔案
對於以上錯誤,根據網友解答我的理解是
我們在使用這些第三方類庫檔案時直接將其拖拽到工程之中,編譯的的時候Xcode也沒有自動引用,所以造成這樣錯誤,這就需要我們手動新增。假如我們在工程中新建某個檔案就不會出現這樣問題;
參考 http://blog.hsin.tw/2012/ios-dev-undefined-symbols-for-architecture-i386/