架构i386 clang的重复符号

时间:2012-09-05 10:41:43

标签: objective-c ios5 admob

我在google和stackoverflow上看到了几个与此错误相关的帖子,我已经阅读了所有这些帖子,但仍然提出了问题,我很乐意找到解决方案。这是我在编译时收到的错误消息......

  找不到选项'-L / Users / somefolder / Documents / Bharat / MyApp copy / GoogleAdMobAdsSDK'的

目录   重复符号_OBJC_CLASS _ $ _ AppDelegate in:       /Users/madept/Library/Developer/Xcode/DerivedData/Alpha-dvvymdlmzseytagllsmbbrxdgutz/Build/Intermediates/Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

感谢。

24 个答案:

答案 0 :(得分:234)

此错误经常发生的另一个原因是意外导入.m文件而不是.h。

答案 1 :(得分:57)

<强>步骤:

  1. 检查目标设置中的构建阶段。
  2. 检查是否存在任何文件两次或一次。
  3. 如果文件存在两次删除一个。如果没有删除底部的文件 这是最新的一个。
  4. 再次建造。

答案 2 :(得分:25)

只是添加可能的解决方案。

在我的情况下,我意外地在头文件中声明并初始化了一个变量。

例如,这是错误的:

MyFile.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant = 6;

应该是:

MyFile.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant;

MyFile.m

#import "MyFile.h"

NSInteger const ABCMyConstant = 6;

答案 3 :(得分:20)

转到构建设置并搜索无通用块并将其设置为。再次构建,你不会再犯这个错误。

答案 4 :(得分:11)

我发现当我在.m文件中声明const与另一个.m文件中的另一个const同名时,我收到错误。两个文件#included相同的父文件。

答案 5 :(得分:8)

我刚刚在为Core Data重建模型类后遇到过这种情况。创建对象类的菜单选项创建了一个重复的模型类。一旦我删除了欺骗,错误就消失了......

答案 6 :(得分:7)

链接器错误始终显示有关库使用或导入问题的问题。

有时,在导入.m文件而不是.h文件时会发生错误。

请检查您的代码,并在您的一个头文件(.h扩展名)中查找.m import语句,我遇到了类似的问题,并引发了14个重复的符号错误。

检查您是否导入了ViewControler.m而不是.h,所以必须这样:

    import "ViewController.h"

并且您的AppDelegate.h应该是这样的:

import "UIKit/UIKit.h"
import "ViewController.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) ViewController *mainController;
@end

始终记住导入头文件而不是.m

答案 7 :(得分:4)

如果其他人已经尝试了所有其他答案但仍然无效,请尝试使用您喜欢的文本编辑器打开.xcodeproj文件,然后搜索给您带来麻烦的课程名称。确保在执行此操作之前关闭Xcode。在文件中,.h应该有一行,而.m应该有另一行。如果存在重复项,请将其删除,保存文件并重新构建。

答案 8 :(得分:4)

我遇到了一个我知道在另一个项目中工作过的框架。我复制了其他项目中的文件并将其添加到此项目中。然后在构建时我遇到了76个重复错误。

对我来说,简单的解决方案是从其他链接器标志中删除-ObjC。以前的项目没有那个。一旦我这样做,警告就消失了,项目也顺利建成了。

答案 9 :(得分:3)

当我在主项目中包含静态库时,我遇到了这个错误,同时还包括第二个库,该库也引用了库。这很令人困惑,所以也许这更清楚。

MyWorkspace +主要项目    +参考图书馆1    +参考图书馆2 +图书馆1 +图书馆2    +参考图书馆1

我从主项目中删除了对库1的引用,错误就消失了。

答案 10 :(得分:3)

另一个原因可能是,在构建分发版本时,项目的目标是模拟器而不是真实设备。这也会导致此错误消息。

答案 11 :(得分:2)

最后我得到了解决方案 -

  1. 删除我添加的AdMob SDK的所有引用(也删除 来自工作空间)。
  2. 清理您的项目
  3. follow this link to add AdMob again
  4. 清理并重建

答案 12 :(得分:2)

在某些情况下,您还可以获得“架构的重复符号...”错误,因为您在两个不同的文件中意外地声明了具有相同名称的常量(const)。

答案 13 :(得分:2)

解决这个问题的最简单方法是问题Xcode 7.0或后者只是将没有公共块更改为否它将解决您的问题尝试此项目目标&gt;构建设置&gt;没有公共区块,我将其更改为NO。

答案 14 :(得分:1)

我尝试清理项目,擦除了所有派生数据。没事。 Atlas,这对我有用。

enter image description here

另一个原因可能是在构建发行版本时,该项目针对的是模拟器而不是实际的设备。这也会导致此错误消息。

答案 15 :(得分:1)

我有两次定义相同C函数的地方。在两个不同的.m文件中。只需删除其中一个定义即可。

答案 16 :(得分:0)

有时候信不信由你,Xcode搞砸了项目文件。我们找到的唯一解决方案是使用文本编辑器手动删除对违规文件的每个引用,然后在Xcode中重新添加文件。

答案 17 :(得分:0)

自我注意:&#34;阅读错误!&#34;

就我而言,它说:duplicate symbol _OBJC_CLASS_$_SATCoreData in:

翻译:名为SATCoreData的目标C类重复。

然后它给出了两个符号出现的路径。读取路径指向以.o结尾的两个类文件。如果你看两个课程,你会发现一些可疑的东西。在我的情况下,我意外地给了两个同名的课程。我在另一个类的文件中有一个类,因为我正在测试一些东西而且懒得做一个单独的类。希望这有助于某人。

答案 18 :(得分:0)

我从另一个项目导入文件,它也有main.m文件。总的来说,我有两个main.m文件,删除一个解决了我的问题。

答案 19 :(得分:0)

我复制&amp;后出现此错误将测试文件粘贴到项目中,忘记更改界面名称和实现行:

@interface TDInputValidationsTests : XCTestCase

@implementation TDInputValidationsTests

愚蠢的错误......我也建议看看&#34;构建阶段&#34;项目上的选项卡,用于检查重复项。删除派生数据并进行清理构建也可能有所帮助。

答案 20 :(得分:0)

我遇到了这个问题而且我被困了一段时间。对我来说导致问题的是我在.h文件中写了一些布尔值(在#import和@interface之间)并将它们用到我的.m文件中

我只是将它们从我的.h文件中删除,并将它们复制到我的.m文件中的相同位置,然后构建成功。

答案 21 :(得分:0)

设置OCMock时出现同样的错误。我通过在Building Phase

的'Copy Files'部分添加libOCMock.a来修复它

答案 22 :(得分:0)

取自https://stackoverflow.com/a/2755581/190599

您可以做的是放入标题(MyConstants.h):

extern const int MyConstant;
extern NSString * const MyStringConstant;

在源文件中,包含上面的标题但定义常量(MyConstants.m):

const int MyConstant = 123;
NSString * const MyStringConstant = @"SomeString";

然后,您只需要将标头包含在使用这些常量之一的任何其他源文件中。标题只是声明这些常量存在于某处,因此编译器不会抱怨,因为链接器的工作就是解析这些常量名称。包含常量定义的源文件被编译,链接器看到这是常量所在的位置,并解析在其他源文件中找到的所有引用。

在标头中声明和定义常量(未声明为static)的问题是编译器将其视为包含该标头的每个文件的独立全局。当链接器尝试将所有已编译的源链接在一起时,它会遇到包含MyConstants.h的全局名称的次数。

答案 23 :(得分:0)

对我来说不同,我按原样复制了类实现方法,并且iVars也被复制了...所以在iVars的世界中有两组,编译器在链接*之前一直抱怨重复的ivars .o文件。

阅读输出有助于删除所有重复的ivars ...感谢新功能,你不需要@synthesize所有属性......错误就消失了......