重复符号为build筑i386铛
我已经看到有关这个错误的谷歌和stackoverflow的几个职位,我已经读了所有但仍然提取的问题,我会很高兴的解决scheme。 这是我编译时收到的错误消息…
目录找不到选项'-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
谢谢。
此错误经常发生的另一个原因是意外导入.m文件而不是.h。
脚步:
- 检查目标设置中的生成阶段。
- 检查是否有任何文件存在两次或一次。
- 如果文件存在两次删除一个。 如果不是删除最新的那个底部的文件。
- 重新构build。
只是为了增加可能的解决scheme。
在我的情况下,我不小心在头文件中声明和初始化一个variables。
例如,这是错误的:
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;
转到生成设置并search没有公共块 ,并将其设置为否 。 再次build立你不会再得到这个错误。
我发现,当我在.m文件中声明一个与另一个.m文件中的另一个const
具有相同名称的const
时,出现错误。 两个文件都包含在同一个父文件中。
我刚刚在为Core Data重新创build模型类时遇到过这个问题。 创build对象类的菜单选项创build了一个重复的模型类。 一旦我删除了愚蠢,错误消失了…
链接器错误始终显示有关库使用情况或导入问题的问题。
有时,导入.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
如果其他人尝试了所有其他答案,但仍然无法正常工作,请尝试用您最喜欢的文本编辑器打开.xcodeproj文件,然后search给您带来麻烦的类的名称。 确保在执行此操作之前closuresXcode。 在文件中,应该有一行.h和另一行.m。 如果有重复,删除它们,保存文件,然后重新构build。
我有一个我知道在另一个项目中工作的框架。 我已经从另一个项目复制文件,并将其添加到这个。 然后当build设我有76重复的错误。
对我来说简单的解决scheme是从其他链接器标志中删除-ObjC
。 以前的项目没有这个。 一旦我这样做了,警告就消失了,项目成功了。
当我在主项目中包含一个静态库时,出现了这个错误,同时还包含了另外一个对该库有参考的库。 这很混乱,所以也许这是更清楚的。
MyWorkspace +主项目+对库的引用1 +对库的引用2 +库1 +库2 +对库的引用1
我从主项目中删除了对库1的引用,错误消失了。
另一个原因可能是在构build分发版本时,项目针对的是模拟器而不是真实的设备。 这也会导致这个错误信息。
最后,我得到了解决scheme –
- 删除我添加的所有AdMob SDK参考(也从工作区中删除)。
- 清理你的项目
- 按照此链接再次添加AdMob
- 清理和重build
最简单的方法来解决这个问题是Xcode 7.0或后者只是改变没有共同块没有它会解决你的问题试试这个项目目标>build立设置>没有共同的块,我把它改为没有。
在某些情况下,你也可以得到一个“重复的符号架构…”的错误,因为你意外地在两个不同的文件中声明了一个常量(const)。
我曾经在那里定义了两次相同的C函数。 在两个不同的.m
文件中。 简单地删除其中一个定义,瞧。
对我来说这是不同的,我复制了类实现方法,并且iVar也被复制了…所以在iVars的世界中有两个集合,并且在链接* .o文件之前编译器一直抱怨重复的ivars 。
阅读输出帮助删除所有重复的ivars …感谢新的function,你不需要@synthesize所有的属性…错误消失了…
设置OCMock时出现同样的错误。 我通过添加build筑阶段的“复制文件”部分中的libOCMock.a来修复它
在将testing文件复制并粘贴到项目中后,发生此错误,忘记更改接口和实现行的名称:
@interface TDInputValidationsTests : XCTestCase
和
@implementation TDInputValidationsTests
愚蠢的错误…我也build议看项目上的“构build阶段”选项卡检查重复。 删除派生数据并进行清理构build也可能有所帮助。
我从另一个项目导入文件,它也有main.m文件。 总的来说,我有两个main.m文件,删除一个解决了我的问题。
有时信不信,Xcode把项目文件搞砸了。 我们发现的唯一解决scheme是使用文本编辑器手动删除对违规文件的所有引用,然后在Xcode中重新添加文件。
注意自己:“读错了!”
在我的情况下它说: duplicate symbol _OBJC_CLASS_$_SATCoreData in:
翻译:一个名为SATCoreData
的Objective C类被复制。
然后它给出符号的两个出现的path。 读取path指向两个以.o
结尾的类文件。 如果你看两门课,你会发现一些可疑的东西。 就我而言,我意外地给了两个同名的class级。 我在另一个class的档案里面有一个class,因为我正在testing一些东西,而且懒得做一个单独的class。 希望这有助于某人。
我有这个问题,我被卡住了一段时间。 导致这个问题的东西是我写了一个布尔到.h文件(在#import和@interface之间),并将它们用于我的.m文件
我只是从我的.h文件中删除它们,并将它们复制到我的.m文件的相同位置,并且构build成功。
采取从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";
然后,只需要将头文件包含在任何其他使用这些常量的源文件中。 头只是声明这些常量存在某处,所以编译器不会抱怨,因为链接器的工作是解决这些常量名称。 包含常量定义的源文件会被编译,链接器会看到这是常量所在的位置,并parsing了其他源文件中的所有引用。
在头文件中声明和定义一个常量(没有被声明为static
)的问题在于,编译器将其视为包含该头文件的每个文件的独立全局。 当链接器尝试将所有编译的源代码链接在一起时,它会像包含MyConstants.h
一样多次遇到全局名称。