duplicate symbol XXXX in:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ld: 7 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
對于這個錯誤茧跋,大多數(shù)原因在于重復(fù)引用慰丛。當(dāng)然,一般自己建的類不會出現(xiàn)重復(fù)的厌衔,但是檢查一下引用的第三方類庫會不會有重復(fù)的璧帝。除了這些肉眼可見的錯誤之外還有一些表面上看不到的錯誤:
我之前遇到一個錯誤,后來發(fā)現(xiàn)是定義了const int a = 1;導(dǎo)致的富寿,具體是這樣的
在A類的.h文件中定義了const int a = 1;在B類引用了A類(#import"A.h")睬隶,然后在B類中視同了A類里面定義的a,結(jié)果編譯就出錯了页徐。原因是const是常量苏潜,所以每次引用A類的時候它就會被引用一次,這樣在A.m和B.h中引用了兩次A.h变勇,導(dǎo)致編譯器認(rèn)為A.h中的a引用了兩次恤左,就報錯了duplicate symbol _a in:的錯誤。
解決方式是在const前面加static修飾搀绣,static const int a = 1;這樣定義了之后飞袋,a只會被引用一次,就不會報錯了链患。