duplicate symbol是一種常見的鏈接錯(cuò)誤虱痕,不像編譯錯(cuò)誤那樣可以直接定位到問題的所在役拴。但是經(jīng)過一段時(shí)間的總結(jié),發(fā)現(xiàn)這種錯(cuò)誤總是有一些規(guī)律可以找的挎狸。
1.出現(xiàn)錯(cuò)誤
error: linker command failed with exit code 1 (use -v to see invocation)
2.查看錯(cuò)誤詳情
點(diǎn)擊紅色報(bào)錯(cuò)扣汪,來到詳情界面
進(jìn)而找到問題關(guān)鍵點(diǎn):ViewController文件? ? ??7 duplicate symbols for architecture arm64
3.解決錯(cuò)誤
1、首先排查項(xiàng)目中是否有名字重復(fù)的文件锨匆;
結(jié)合我的以上的報(bào)錯(cuò)情況崭别,查看項(xiàng)目中是否不止一個(gè)ViewController文件
2、檢查是否在#import頭文件的時(shí)候恐锣,錯(cuò)把.h寫成了.m
通過Xcode的過濾查詢功能茅主,我很很快就修正了錯(cuò)誤。
4.總結(jié)
引用一下他人的總結(jié)土榴,人家考慮的情況比較周全诀姚,嘿嘿
1.引入頭文件時(shí),由于疏忽玷禽,誤引入.m文件赫段。這種一般仔細(xì)檢查一下出現(xiàn)問題的類的源文件就能發(fā)現(xiàn)。
2.同一個(gè)類论衍,實(shí)現(xiàn)兩次瑞佩,即有兩個(gè)@implementation 。這種一般會(huì)有一個(gè)警告坯台,也比較容易發(fā)現(xiàn)炬丸。
3.工程文件,同一個(gè)類文件被引入了兩次蜒蕾,引起這種錯(cuò)誤的原因大概有兩種:一是多人協(xié)作開發(fā)時(shí)稠炬,導(dǎo)致project文件合并沖突;二是同名文件不在同一目錄下咪啡,添加到工程時(shí)造成重復(fù)添加首启。 這種一般在文件視圖,用名字過濾器檢查一下就發(fā)現(xiàn)了撤摸。
4. Targets的Build Phase設(shè)置項(xiàng)里毅桃,查看Complie Sources這一項(xiàng),看看出現(xiàn)問題的類是不是有重復(fù)的准夷,用文件名過濾也比較容易發(fā)現(xiàn)钥飞。這種問題一般也是多人協(xié)作開發(fā)時(shí),project文件沖突導(dǎo)致的衫嵌。發(fā)現(xiàn)這種問題读宙,只要?jiǎng)h除就可以了。不過在我解決問題過程中楔绞,刪除其中一個(gè)文件時(shí)结闸,重復(fù)文件會(huì)自動(dòng)全部刪除唇兑,所以還需要單獨(dú)添加一下。
5.如果我們的工程中引用了第三方的庫桦锄,而恰好第三方的庫里面有一個(gè)ClassA扎附,也會(huì)出現(xiàn)這種問題。如果不能修改第三方的庫代碼察纯,只能修改我信自己的代碼了帕棉。
附上鏈接Duplicate Symbol鏈接錯(cuò)的原因總結(jié)和解決方法
如果感覺我的文章寫的好不錯(cuò)针肥,那就不要吝嗇你的贊喲饼记,謝謝哈!