2009-08-18 110 views
2

我的项目一直工作的很好,今天我添加了一个admob库到我的项目,现在它不会编译!编译时iPhone sdk项目中奇怪的重复符号?

以下是错误:

ld: duplicate symbol .objc_category_name_NSCharacterSet_NSCharacterSet_Extensions in /Photo/libAdMobSimulator.a(NSCharacterSet_Extensions.o) and /Photo/build/Photo.build/Debug-iphonesimulator/Photo.build/Objects-normal/i386/NSCharacterSet_Extensions.o 

如何解决?

回答

1

你必须在这两个libAdMobSimulator并在照片(应用程序/包),你的代码

定义上NSCharacterSet类别NSCharacterSet_Extensions你需要确保类别名称是独一无二的,即重命名这些类别之一。

0

您是否使用#include代替#import的头文件?我不确定它适用于这种情况,但这是获取重复符号的一种方法。

2

就像后续提示:我得到了这个错误,因为我已经包括了流行的touchjson库。 admob库带有自己的副本,这就是为我造成冲突的原因。从你的项目中删除你的touchjson库的副本,你很好去。

0

我曾经犯过这个错误,当我犯了一个愚蠢的错误,将我的.h和.m文件切换到我创建的类别中。希望这可以帮助别人做同样的事情:)

2

我有同样的问题,出于同样的原因,看遍了,这是修复。

ObjC和-all_load需要位于TARGET的“其他链接器标志”中。如果你遇到同样的问题,你就会知道它,因为当类别现在​​已经成功链接时,你的应用程序将不会生成,因为有一些“重复的符号”。

当。

但等待 - 因为JDEE指出:

i got this error as I had included the popular touchjson library. the admob library comes with its own copy

和删除您包括TouchJSON副本确实明确了这一问题。

还是......这并不理想。我很确定那里的TouchJSON版本很好,但我真的很想在将来能够更新。

This guy找到了另一种解决方案,但它涉及重命名TouchJSON中使用的所有内容。不理想。

我目前处于亏损状态,但幸运的是不会因为快速修复而蒙受损失。不过,如果你是一个流行的静态库的开发人员,那么听到你们中的一个怪兽大脑听到这样的冲突会如何避免遇到这种冲突是很好的。

我正在启动关于该主题的另一个问题。看看我们是否能够对这些部分有所了解。

UPDATE:

留下您TouchJSON副本的头文件在您的项目。删除实现文件,那么你将不会创建任何对象文件,那么你将不会产生任何冲突。感谢this post about a similar conflict involving cocos2d这个最后的提示。