升级到Xcode 4后,出现了无数重复符号错误导致构建错误。

10

在我升级之前,昨天Xcode 3的一切工作都很完美。所以我完成了升级,重启了电脑,然后打开了我的旧项目。我需要重新配置一些设置,比如头文件路径,以便开始编译。我正在使用AdWhirl进行广告中介,此时我的错误开始显示类似于

的内容。

   duplicate symbol _OBJC_METACLASS_$_SBJSON in /Users/Admin/Desktop/TMapLiteAdwhirl/AdWhirl/MMSDK/libMMSDK.a(SBJSON.o) and 
/Users/Admin/Library/Developer/Xcode/DerivedData/TruxMapLite-bgpylibztethnlhkfkdumpvrjvgy/Build/Intermediates/TruxMapLite.build/Debug-iphoneos/TruxMapLite.build/Objects-normal/armv6/SBJSON.o for architecture armv6
它所指的库是我在AdWhirl中包含的一个广告网络的SDK。这两个“重复符号”都是指相同的文件,但它们使用不同的路径。如果我还有XCode 3,我将尝试从构建路径中排除这些库,但我不知道如何在Xcode 4中实现这一点。我已经尝试了所有可能的方法,甚至删除了项目中与图书馆相关的所有文件,但当我这样做时,我会在AdWhirl目录中看到一个不同的图书馆出现相同类型的错误。这非常令人沮丧,因为在升级之前,一切都运作顺利,我准备提交我的二进制文件。如果有人有任何建议,我很乐意尝试。谢谢!

我遇到了同样的问题,我已经阅读了@justin的答案,但是我找不到检查这些参数的方法。 - JonLOo
5个回答

5

我遇到了类似的问题,并通过编辑我的构建设置来解决它:

  1. 从左侧的导航列表中选择 项目导航器⌘-1)。
  2. 选择您的项目文件。
  3. 从出现的列表中选择您的目标。
  4. 切换到 构建阶段 选项卡。
  5. 检查重复的库是否已在 链接二进制文件 和/或 编译源代码 中。

现在,我没有使用相同的库或项目配置,因此这可能与实际情况有所偏差。


5

请确保您未导入 .m 文件。

这个错误曾经给我带来了无尽的问题。


你刚刚为我节省了很多时间 :) - gillyD

1

我不确定你的设置,但我曾经遇到过类似的问题,并通过更改我的构建位置来解决它。在xcode 3中,我将其设置为绝对路径,并忘记在xcode 4中更改此设置。更改“派生数据”选项立即解决了我所有的错误。此选项位于“首选项->位置”中。


0

我刚刚通过在一个类的头文件中用#import语句替换了@class来解决了那个问题。

理论上,只使用@class声明(并在实现部分使用#import)应该能够编译,但它却出现了"重复符号"错误。

所以,请检查你的@class和#import语句。


0

我发现在我的源文件夹中有旧的目标文件,来自于旧的Makefile构建。当我将源文件夹添加到XCode时,我不小心添加了源文件和目标文件。这导致了这些重复符号错误。从我的源文件夹中删除.o和.lo文件有所帮助。

我的源文件夹中还有一个.libs文件夹,来自于另一个旧的构建。那里也包含了.o文件。删除它们解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接