Duplicate Symbol链接错的原因总结和解决方法

duplicate symbol(符号复制,即有相同的文件名)是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在。但是经过一段时间的总结,发现这种错误总是有一些规律可以找的。
例如,我们有如下的最简单的两个类代码:

//  ClassA.h
#import <Foundation/Foundation.h>
@interface ClassA : NSObject
@end

//  ClassA.m
#import "ClassA.h"
@implementation ClassA
@end

//  ClassB.h
#import <Foundation/Foundation.h>
@interface ClassB : NSObject
@end

//  ClassB.m
#import "ClassB.h”

@implementation ClassB
@end

编译后出现的错误信息如下:

duplicate symbol _OBJC_METACLASS_$_ClassA in:   
 /Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassA.o   
 /Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassB.o
duplicate symbol _OBJC_CLASS_$_ClassA in:    /Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassA.o    
/Users/dajie/Library/Developer/Xcode/DerivedData/linkTest-cpjaaatiyqpvxcbzfzpklcbqrgqg/Build/Intermediates/linkTest.build/Debug-iphonesimulator/linkTest.build/Objects-normal/i386/ClassB.old: 2 
duplicate symbols for architecture i386clang: 
error: linker command failed with exit code 1 (use -v to see invocation)

从上面出现问题的地方,我们应该能推测出是ClassA这个类出了问题。如果这个类是我们自己写的,就容易办一些。
可以考虑以下原因:
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,也会出现这种问题。如果不能修改第三方的库代码,只能修改我信自己的代码了。

Duplicate Symbol链接错的原因总结和解决方法相关推荐

  1. Duplicate Symbol链接错误的原因总结和解决方法[转]

    from:http://www.cocoachina.com/bbs/read.php?tid=177492 duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的 ...

  2. undefined reference to symbol xxxxx和undefined symbol:xxxx错误的原因分析以及解决方法

    Linux下编译程序时,经常会遇到"undefined reference to XXX" 报错,或者运行时出现undefined symbol:xxxx报错. 这里总结一些可能的 ...

  3. Python中报错:IndentationError: unexpected indent的原因分析和解决方法

    Python中报错:"IndentationError: unexpected indent"的原因分析和解决方法 "IndentationError: unexpect ...

  4. Windows 变慢原因分析及解决方法

    Windows变慢原因分析及解决方法 谁都希望计算机一开机就可以立即进入Windows系统而不用等待,或者是系统在使用的时候不会越来越慢,但由于种种原因常常使这些愿望不能实现,甚至一开机就死机或者用着 ...

  5. 打印时总跟出一页计算机主的纸,打印机只打印一页却重复不停打印的原因之一和解决方法...

    打印机只打印一页却重复不停打印的原因之一和解决方法 腾讯视频/爱奇艺/优酷/外卖 充值4折起 打印机和电脑配套使用时,会出现各种各样问题,就比如有时候设定只打印一页纸,打印机却重复在打印,今天小编以w ...

  6. Windows变慢原因分析及解决方法·系统篇

    Windows变慢原因分析及解决方法·系统篇 系统加速 一 [Windows 98 ] 1.不要加载太多随机启动程序 不要在开机时载入太多不必要的随机启动程序.选择"开始→程序→附件→系统工 ...

  7. 微信二次分享签名错误php,微信二次分享报错invalid signature问题及解决方法

    基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享.问题出在用户B收到的分享链接与用户A打开的链接不同 A用户的链接为 B用户收到的连接 ...

  8. Navicat Premium链接MySQL时出现2059错误解决方法

    下面这个是有关Navicat Premium链接MySQL时出现2059错误解决方法的教程(在看该教程之前mysql的配置已完成) 链接MySQL时出现2059错误该怎么解决呢? 提示:以下是本篇文章 ...

  9. onload js函数不执行的原因分析及解决方法

    今天打开网站的时候,发现很多页面的信息都没有显示出来,仔细观察了之后,发现都是onload的js函数没有执行的原因.其实之前曾发现过这个情况,我以为是网站出了问题,然后采用多种方法试图让onload的 ...

最新文章

  1. linux c glob使用(文件路径模式查找函数)
  2. hdu2276 矩阵构造
  3. Activiti工作流引擎使用详解(一)
  4. jupyter安装出现问题:安装后无法打开
  5. 工业机器人用铸铁牌号_常用铸铁牌号
  6. Beta冲刺(9/7)——2019.5.31
  7. Linux 内核里的数据结构——基数树
  8. MySQL备份---lvm snapshot
  9. jQuery插件——自定义jQuery插件
  10. 信号与线性系统分析(吴大正,郭宝龙)(2-冲激函数)
  11. 分离开发中的laravel
  12. Python函数的输出
  13. Hive 3.x|第八天|DML函数
  14. 统计了300位硬件工程师的工资,我悟了
  15. 台式机显示 “未连接到互联网“解决办法
  16. L1 Cache(一级缓存)
  17. ff14优雷卡补正什么意思_如何评价FF14 禁地优雷卡?
  18. vue脚手架-上传图片 编辑修改图片(三)
  19. 博弈论-斐波那契博弈
  20. matlab三电平statcom无功检测双闭环svpwm调制两电平/三电平逆变器拓扑

热门文章

  1. Cannot find module ‘@babel/compat-data/corejs3-shipped-proposals‘
  2. 数据库的read_only模式
  3. 在网站建设方案中如何做好网站需求分析?
  4. 谷歌终于也坐不住了 。。。
  5. onestage方法_目标检测——One-stage和Two-stage的详解
  6. proteus仿真常见原件
  7. 对话何小鹏:小鹏汽车在过弯道 内卷导致上游挣钱车企亏钱
  8. 为什么大家说mysql数据库单表最大两千万?
  9. TSCPC、TDC、CFD
  10. 人生苦短 我用python这是什么梗_人生苦短,我用python之二