编译时iPhone sdk项目中的奇怪重复符号?

时间:2009-08-18 05:36:16

标签: iphone gcc

我的项目一直很好,今天我在项目中添加了一个admob库,现在它不会编译!

这是错误:

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

如何解决?

5 个答案:

答案 0 :(得分:2)

就像后续注释:我得到了这个错误,因为我已经包含了流行的touchjson库。 admob图书馆有自己的副本,这就是导致我冲突的原因。从项目中删除touchjson库的副本,你就可以了。

答案 1 :(得分:2)

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

ObjC和-all_load需要在TARGET的“其他链接器标志”中。如果您遇到同样的问题,您就会知道它,因为虽然类别现已成功链接,但由于某些“重复的符号”,您的应用将无法构建。

荡。

但等等 - 正如jdee指出的那样:

  

我收到了这个错误,因为我已经包含了   流行的touchjson图书馆。敬佩者   库附带自己的副本

删除你所包含的TouchJSON副本确实可以解决问题。

仍然......这不太理想。我很确定TouchJSON的版本很好,但我真的希望将来可以更新。

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

我现在感到很茫然,但幸运的是,这并不是因为快速修复而感到茫然。尽管如此,如果你是一个流行的静态库的开发者,那么你可以从其中一个怪物大脑那里听到如何避免遇到这种冲突。

我正在就这个问题提出另一个问题。看看我们是否能够理解这些部分。

更新:

保留项目中TouchJSON副本的头文件。删除实现文件,然后您将不会创建任何目标文件,那么您将不会创建任何冲突。感谢this post about a similar conflict involving cocos2d对此问题的最后提示。

答案 2 :(得分:1)

您在libAdMobSimulator和Photo中的代码(app / bundle)中定义的NSCharacterSet上有一个类别NSCharacterSet_Extensions

您需要确保类别名称是唯一的,即重命名其中一个类别。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

当我犯了一个愚蠢的错误,就是把我的.h和.m文件切换到我所做的类别时,我遇到了这个错误。希望这有助于某人做同样的事情:)