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

from:http://www.cocoachina.com/bbs/read.php?tid=177492

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,也会出现这种问题。如果不能修改第三方的库代码,只能修改我信自己的代码了。

欢迎补充。

时间: 2024-10-12 20:06:40

Duplicate Symbol链接错误的原因总结和解决方法[转]的相关文章

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

duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时间的总结,发现这种错误总是有一些规律可以找的.例如,我们有如下的最简单的两个类代码: 1 // ClassA.h 2 #import 3 @interface ClassA : NSObject 4 @end 5 6 // ClassA.m 7 #import "ClassA.h" 8 @implementation ClassA 9 @end 1 // ClassB.h 2

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

duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时间的总结,发现这种错误总是有一些规律可以找的.例如,我们有如下的最简单的两个类代码: //  ClassA.h#import <Foundation/Foundation.h>@interface ClassA : NSObject@end //  ClassA.m#import "ClassA.h"@implementation ClassA@end //  Cl

IIS7报500.23错误的原因分析及解决方法

这篇文章主要介绍了IIS7报500.23错误的原因分析及解决方法的相关资料,需要的朋友可以参考下背景:今天公司终端上有一个功能打开异常,报500错误,我用Fiddler找到链接,然后在IE里打开,报500.23错误:检测到在集成的托管管道模式下不适用的ASP.NET设置.后台是一个IIS7和tomcat7集成的环境,此处记录一下. HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 为什么会出现以上错误? 在

微信开发: scope参数错误或没有scope权限解决方法

scope为snsapi_userinfo 未关注者点击授权提示   scope参数错误或没有scope权限 解决方法 出现这种错误网上查出现有的原因是: 订阅号没有相关的权限 账号没有认证,没有相关的权限 那么这里遇到问题两种都不是.开发账号是 服务号,而且也是认证号. 解决方法: 错误配置: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%

Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI

Win7 +IIS 刚配置的网站,输入网址后报以下错误: 应用程序“PFIZERQUERY”中的服务器错误 Internet Information Services 7.5 错误摘要 HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 详细错误信息 模块 IsapiModule 通知 ExecuteRequestHandler 处理程序 ExtensionlessUrl-ISAPI-4.0_32bit 错

http://localhost/certsrv 错误找不到页面解决方法

http://localhost/certsrv 错误找不到页面解决方法 最近公司需要后台启动安全证书,可安装了“Active Directory证书服务” 后,http://localhost/certsrv页面显示404.500问题,无法进行有效证书签证,在网上搜索了很多资料,都无法解决此问题,而且此问题遇到的人数非常多,都不能给出有效的解决方式,经本人一天的研究,此问题终于得到解决,现将解决方式如下. windows 2003 无此问题,此问题主要集中到windows 2008 系统,经本

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

<p>Windows变慢原因分析及解决方法  <br/> <br/> <br/> <br/> 谁都希望计算机一开机就可以立即进入Windows 系统而不用等待,或者是系统在使用的时候不会越来越慢,但由于种种原因常常使这些愿望不能实现,甚至一开机就死机或者用着用着就越来越慢的情况也经常发生.其实有些时候Windows 启动速度缓慢并不是它本身的问题,而是一些设备或软件造成的.本文就是软件.硬件和病毒三大方面来分析系统速度变慢的原因,并且提供了针对系

网站内容不被百度收录的原因反思及解决方法!

大发迹创业项目网有个网站百度已经没有一个月收录,站长也是着急,于是想着应该怎么解决这个问题.其实网站出了问题,站长应该是最清楚的,所以不要急,仔细回想一下最近操作了什么,然后一个一个去排查就可以找出问题所在,对症下药就ok了. 比如我的这个网站,想要找出问题所在就很简单.回想一下网站也没有做什么优化,建成之后就是单纯的发布内容,网站主要是推荐一些小项目,围绕着项目写文章. 网站几乎是天天更新,终于没有灵感,不知道怎么写了,就开始犯愁了.某一天灵机一动,想着以项目推项目,利用其它的项目来推荐自己操

duplicate symbol _OBJC_CLASS 错误处理方法

错误: ld: duplicate symbol _OBJC_CLASS_$_************ in **************** 一种可能性是项目的不同group里有着相同名称的类 第二种很难找的: xcode的自动完成特性,在你导入头文件的时候,将".h"补成了".m"