BUG-Undefined symbols for architecture x86_64錯誤

當我們在一個項目中想使用外部其他項目的一個類時,可以在項目中直接添加類文件到項目中。但是,在編譯的時候出現了這樣的錯誤:

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_Person", referenced from:
      objc-class-ref in main.o
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…

Xcode添加文件到項目中

Xcode添加文件到項目中

然後選擇需要添加的文件,不過下面的第一個複選框一定要選擇上:

選擇需要導入的文件

選擇需要導入的文件

這裏第一個Copy Items的複選框需要勾選,不然選擇的就是導入一個引用,勾選後直接將文件導入項目中。

然後在main.m中使用:

//
//  main.m
//  ExportObject用法
//
//  Created by Mr. Right on 13-9-24.
//  Copyright (c) 2013年 XCoder Studio. All rights reserved.
//
 
#import <Foundation/Foundation.h>
#import "Person.h"
 
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
        Person * person = [[[Person alloc] initWithFirstName:@"Wang"
                                                    lastName:@"Xi"
                                                        type:1] autorelease];
    }
    return 0;
}

然後編譯運行就出現了上面的錯誤了。是爲什麼呢?

遇到這種問題,首先想到的是導入文件編譯環境發生了變化,所以先選擇Product-Clean將項目緩存清理一下:

Xcode清理項目緩存

Xcode清理項目緩存

但是這樣做還是不行,那怎麼辦呢?我們應該這樣做,看項目有沒有編譯導入的文件,在這個位置查看:

選擇項目-Build Phases選項卡-Compile Sources

Xcode查看項目編譯項目

Xcode查看項目編譯項目

這裏只有一個main.m,Person.m沒有被編譯,當然錯誤了,將Person.m添加進去就OK了。點擊下面的”+”添加,注意只添加.m文件,不添加頭文件!

原文地址:Xcode技巧:項目導入外部文件後編譯運行出現Undefined symbols for architecture x86_64錯誤


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章