當我們在一個項目中想使用外部其他項目的一個類時,可以在項目中直接添加類文件到項目中。但是,在編譯的時候出現了這樣的錯誤:
Undefined symbols for architecture x86_64: |
"_OBJC_CLASS_$_Person", referenced from: |
ld: symbol(s) not found for architecture x86_64 |
clang: error: linker command failed with exit code 1 (use -v to see invocation) |
這說明編譯沒有問題,連接的時候出錯了,找不到導入的目標文件。
先看看是如何導入類文件吧。在項目文件夾上點右鍵,選擇Add file to…
然後選擇需要添加的文件,不過下面的第一個複選框一定要選擇上:
這裏第一個Copy Items的複選框需要勾選,不然選擇的就是導入一個引用,勾選後直接將文件導入項目中。
然後在main.m中使用:
#import <Foundation/Foundation.h> |
int
main( int
argc, const
char * argv[]) |
Person * person = [[[Person alloc] initWithFirstName:@ "Wang" |
然後編譯運行就出現了上面的錯誤了。是爲什麼呢?
遇到這種問題,首先想到的是導入文件編譯環境發生了變化,所以先選擇Product-Clean將項目緩存清理一下:
Xcode清理項目緩存
但是這樣做還是不行,那怎麼辦呢?我們應該這樣做,看項目有沒有編譯導入的文件,在這個位置查看:
選擇項目-Build Phases選項卡-Compile Sources
Xcode查看項目編譯項目
這裏只有一個main.m,Person.m沒有被編譯,當然錯誤了,將Person.m添加進去就OK了。點擊下面的”+”添加,注意只添加.m文件,不添加頭文件!
到這裏 如果還不行的話。那麼就是這個文件關聯了部分官方的庫文件。比如FMDB就需要導入官方的libsqlite3.dylib