56

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

找不到选项“-L/Users/somefolder/Documents/Bharat/MyApp copy/GoogleAdMobAdsSDK”重复符号 _OBJC_CLASS_$_AppDelegate 的目录:/Users/madept/Library/Developer/Xcode/DerivedData/Alpha-dvvymdlmzseytagllsmbbrxdgutz/Build/Intermediates/ Alpha.build/Debug-iphonesimulator/Alpha.build/Objects-normal/i386/AppDelegate-56890B6B994A4284.o

谢谢。

4

24 回答 24

234

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

于 2012-10-07T19:52:42.033 回答
57

脚步:

  1. 检查目标设置中的构建阶段。
  2. 检查任何文件是否存在两次或一次。
  3. 如果文件存在两次删除一个。如果不删除底部的文件,这是最新的文件。
  4. 再次构建。
于 2013-05-20T12:12:56.677 回答
25

只是为了增加可能的解决方案。

就我而言,我不小心在头文件中声明并初始化了一个变量。

例如这是错误的:

我的文件.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant = 6;

它应该是:

我的文件.h

#import <Foundation/Foundation.h>

NSInteger const ABCMyConstant;

我的文件.m

#import "MyFile.h"

NSInteger const ABCMyConstant = 6;
于 2014-03-19T17:07:00.127 回答
20

转到 Build Setting 并搜索No Common Blocks并将其设置为NO。并再次构建,您将不会再次收到此错误。

于 2016-08-04T08:29:06.293 回答
11

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

于 2013-05-02T06:11:14.650 回答
8

在为 Core Data 重新创建模型类后,我刚刚经历了这一点。创建对象类的菜单选项创建了一个重复的模型类。一旦我删除了欺骗,错误就消失了......

于 2012-11-11T00:00:03.713 回答
6

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

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

请检查您的代码并在您的一个头文件(.h 扩展名)中查找 .m 导入语句,我遇到了类似的问题并引发了 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

于 2015-03-21T13:02:30.767 回答
4

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

于 2013-06-03T23:03:46.717 回答
4

我知道在另一个项目中工作的框架存在这个问题。我已经从另一个项目中复制了文件并将其添加到这个项目中。然后在构建时我得到了 76 个重复的错误。

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

于 2014-03-27T06:49:51.727 回答
3

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

MyWorkspace + 主项目 + 对库 1 的引用 + 对库 2 的引用 + 库 1 + 库 2 + 对库 1 的引用

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

于 2013-01-23T19:17:09.810 回答
3

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

于 2014-01-15T11:37:56.750 回答
2

最后我得到了解决方案-

  1. 删除我添加的 AdMob SDK 的所有引用(也从工作区中删除)。
  2. 清理你的项目
  3. 点击此链接再次添加 AdMob
  4. 清理并重建
于 2012-09-05T12:12:11.133 回答
2

解决此问题的最简单方法是问题 Xcode 7.0 或更高版本只需将 no Common Blocks 更改为 NO 它会解决您的问题尝试此项目目标 > 构建设置 > No Common Blocks,我将其更改为 NO。

于 2016-05-02T12:42:50.120 回答
2

在某些情况下,由于您不小心在两个不同的文件中声明了具有相同名称的常量 (const),您还可能会收到“体系结构的重复符号...”错误。

于 2016-05-15T15:59:44.727 回答
1

我有它,我定义了两次相同的 C 函数。在两个不同的.m文件中。只需删除其中一个定义,瞧。

于 2015-03-14T19:40:35.760 回答
1

我尝试清理项目,删除所有派生数据。没有任何效果。阿特拉斯,这对我有用。

在此处输入图像描述

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

于 2018-11-06T06:31:03.950 回答
0

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

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

于 2012-10-09T16:18:46.247 回答
0

我在设置 OCMock 时遇到了同样的错误。我通过在构建阶段的“复制文件”部分添加 libOCMock.a 来修复它

于 2014-03-07T14:20:51.360 回答
0

将测试文件复制并粘贴到项目中后出现此错误,忘记更改接口和实现行的名称:

@interface TDInputValidationsTests : XCTestCase

@implementation TDInputValidationsTests

愚蠢的错误......我还建议查看项目上的“构建阶段”选项卡以检查重复项。删除派生数据并进行干净构建也可能会有所帮助。

于 2014-06-05T09:35:43.037 回答
0

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

于 2014-09-20T13:03:22.920 回答
0

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

于 2014-10-07T15:56:33.500 回答
0

自我注意:“阅读错误!”

就我而言,它是这样说的:duplicate symbol _OBJC_CLASS_$_SATCoreData in:

翻译:一个名为的Objective C ClassSATCoreData是重复的。

然后它给出两个符号出现的路径。读取路径指向两个以.结尾的类文件.o。如果你看这两个类,你会发现一些可疑的东西。就我而言,我不小心给了两个类同名。我在另一个类的文件中有一个类,因为我正在测试一些东西并且懒得创建一个单独的类。希望这可以帮助某人。

于 2015-10-24T20:05:39.620 回答
0

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

我只是从我的 .h 文件中删除了它们,并将它们复制到我的 .m 文件中的同一个地方,构建成功。

于 2016-05-15T19:10:15.893 回答
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

于 2016-10-05T14:58:40.193 回答