ld: 1 duplicate symbol for architecture x86_64的錯誤

duplicate:重複的,複製的

symbols:符號

出現的原因:

1.工程中重複倒入某一類或文件,這一般出現在你添加第三方庫的時候比較多,在不知道的情況下又導入了一次相同的類。

2.就是倒入類的時候,引用的是.m而不是.h

3.項目中用了一個 C 語言的枚舉類型定義方式,會導致重複闖將

4.項目中使用c的時候,參數聲明使用const

2

個人認爲,因爲const聲明的是常量,static聲明的是靜態變量(只聲明一次),所以我們在引用的時候,引用一次是沒問題的,而引用多次,const聲明的對象,會多次創建,從而導致項目中出現重複引用錯誤的情況。

解決方法:

2

我們可以根據錯誤中提示的類去找。一般都可以解決

可以考慮以下原因:

1.引入頭文件時,由於疏忽,誤引入.m文件。這種一般仔細檢查一下出現問題的類的源文件就能發現。

例:ClassB.m 文件修改成下面這樣

#import "ClassB.h>"

#import "ClassA.m” // 這句話有問題

@implementation ClassB

@end

2.同一個類,實現兩次,即有兩個@implementation 。這種一般會有一個警告,也比較容易發現。

例:ClassB.m文件修改成下面這樣:

// ClassB.m

#import "ClassB.h”

@implementation ClassB

@end

@implementation ClassA

@end

3.工程文件,同一個類文件被引入了兩次,引起這種錯誤的原因大概有兩種:一是多人協作開發時,導致project文件合併衝突;二是同名文件不在同一目錄下,添加到工程時造成重複添加。 這種一般在文件視圖,用名字過濾器檢查一下就發現了。

4. Targets的Build Phase設置項裏,查看Complie Sources這一項,看看出現問題的類是不是有重複的,用文件名過濾也比較容易發現。這種問題一般也是多人協作開發時,project文件衝突導致的。發現這種問題,只要刪除就可以了。不過在解決問題過程中,刪除其中一個文件時,重複文件會自動全部刪除,所以還需要單獨添加一下。

5.如果工程中引用了第三方的庫,而恰好第三方的庫裏面有一個ClassA,也會出現這種問題。如果不能修改第三方的庫代碼,只能修改我信自己的代碼了。

 

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