关于duplicate symbols for architecture xxx问题的总结

如题所述

第1个回答  2022-07-25
在开发中我们可能与遇到 duplicate symbols for architecture xxx 的编译问题,下面我们总结下都有哪些原因造成出现这个错误,以便再次遇到这种问题时能够快速地排查解决。duplicate意思是 重复的,可复制 的,symbols是符号、标识的意思。所以这个问题一般是工程中存在某些相同的东西。我们一般可以从这个方向去进行排查,一般出现这种情况,在错误信息中都会给出提示,还是比较容易找出出现问题的地方并快速地解决的。网上一搜也会有很多说这问题的出现和解决方式,但自己也想总结记录下来。

第一种就是可能你的工程或第三方库中存在了相同的东西。比如我新建了一个Person类,虽然后来不能再新建一个重复的类(Xcode会提示是否替换),但是可以通过在Finder中拉个相同的文件复制到工程目录中,或者引入的第三方库或自己实现的库中与工程有相同文件名的文件,在编译阶段就会报错。如有两个重复的文件:

而排查哪些重复的话,就看Xcode错误的上方就会有提示,比如:

这样就可以看出重复的类(或importl了.m)为:RDYPerson了。移除其中一个或重命名即可。

如果在一个类中将#import写成了:

也是会报duplicate symbols这样的错误。

声明了全局的多个同名变量,而且未使用 extern 关键字,编译设置中还开启了 No Common Blocks ,那么编译器就会检查,然后抛出这样的错误。将这个属性设置为NO,则可编译通过。
例如下面:

存在两个全局的变量testVar, No Common Blocks 又开启了,所以编译就会报错错,关闭这个设置后或将其中一个加上 extern 关键字即可解决。
相似回答