我现在对上面的标题有同样的问题,但还没有找到正确的答案。我收到了错误:
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
/Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
任何帮助表示赞赏。
最后我找出了这个错误的原因,因为我将-ObjC
添加到了Other Linker Flags
。删除此值后,我可以成功构建我的项目,但我不知道为什么。有谁能解释一下?
架构x86_64的75个重复符号
表示您已经加载了两次相同的功能。当从-ObjC
删除Other Linker Flags,
后问题消失,这意味着此选项导致函数加载两次:
来自技术问答
此标志使链接器加载定义Objective-C类或类别的库中的每个目标文件。虽然此选项通常会导致更大的可执行文件(由于加载到应用程序中的其他对象代码),但它将允许成功创建包含现有类的类别的有效Objective-C静态库。
https://developer.apple.com/library/content/qa/qa1490/_index.html
以下步骤解决了我的问题。
找到副本的最快方法是:
在多个类中的@implementation下定义相同的变量也会导致此问题。
就我而言,该位置有两个同名的文件
目标>构建阶段>编译源并删除任何重复的文件。
我在Xcode 7.3中打开一些遗留项目的情况是:
duplicate symbol _SomeEnumState in:
接下来是两个不相关的文件列表。然后重复几次,最后:
ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
为我解决的是改变枚举声明:
enum SomeEnumState {
SomeEnumStateActive = 0,
SomeEnumStateUsed = 1,
SomeEnumStateHidden = 2
} SomeEnumState;
对此:
typedef NS_ENUM(NSUInteger, SomeEnumState) {
SomeEnumStateActive = 0,
SomeEnumStateUsed = 1,
SomeEnumStateHidden = 2
};
如果有人对此有解释,请赐教。
它对我有用
对于我在Xcode8推荐的项目设置期间,将“No Common Blocks”更新为YES会导致此问题。
确保您没有意外导入.m文件,您可能希望在“项目”窗口中删除派生数据,然后再构建并运行。
添加pod存储库时,我收到了同样的错误
pod 'SWRevealViewController'
对于已经从gitHub添加的源代码(SWRevealViewController)。因此,错误将通过删除源代码或pod存储库来修复。
案例#2:
第二次,当我在.h文件中声明一个常量时出现这个错误。
NSString * const SomeConstant = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...
对于遇到此问题的其他任何人,我都没有在任何这些答案中看到我的解决方案。
有一个手动寻址的.pbxproj合并冲突(尽管很差)之后,.pbxproj中有对单个类文件的重复引用。从项目>构建阶段>编译源中删除那些修复了我的一切。
希望这可以帮助有人下线。
对我来说,将“无公共块”从“是”更改为“否”(在“目标 - >构建设置 - > Apple LLVM - 代码生成”下)可解决此问题。
今天,我得到了同样的错误。错误的关键词是duplicate
。我修复它:
1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :
3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear
与Juice007类似,我在两个不同的.m文件中声明并初始化了一个C类型变量(未导入!)
BOOL myVar = NO;
然而,这种声明和初始化变量的方法,即使在.m中也是如此,即使在@implementation中也允许它全局范围。你的选择是:
static BOOL myVar = NO;
BOOL myVar;
-(void) init{
myVar = NO;
}
@property BOOL myVar;
@interface myClass(){
BOOL myVar;
}
@end
在我的情况下,我在我的项目中定义了两个main()
方法,删除一个解决了问题。
当我在我的项目中整合lob项目时,同样的问题发生在我身上。
实际上lob项目也有AFNetworking文件,所以我从lob项目中删除了.m文件。
实际上.m文件与我的项目POd / AFNetworking / .m文件冲突
在Xcode 6.3.2中。我检查了所有可能性,如下图所示
1:我没有在我的项目中导入.m文件。
2:从其他链接器标志中删除了-ObjC
。
3:删除了我的所有派生数据。
我仍然得到同样的错误。我通过从.pch
文件中删除任何变量声明来删除此错误。在我的情况下,我已经在AppDelegate
文件中声明了.pch
对象。最后我找到了导致错误的原因。所以我从.pch文件和我的项目工作魅力中删除任何变量的声明。
最近一直在寻找错误的来源。当我发现我的应用程序不想编译时,我很奇怪,因为我在不同的类中有以下代码片段:
dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
NSTimeInterval interval;
double second, subsecond;
struct timespec time;
dispatch_time_t milestone;
interval = [date timeIntervalSince1970];
subsecond = modf(interval, &second);
time.tv_sec = second;
time.tv_nsec = subsecond * NSEC_PER_SEC;
milestone = dispatch_walltime(&time, 0);
return milestone;
}
希望可能对某人有所帮助。
另一个导致此错误的愚蠢错误是重复文件。我不小心复制了一些文件两次。首先我去了目标 - >构建阶段 - >编译源代码。在那里,我注意到该列表上的一些文件及其位置。
我希望它一定能帮到你
我为架构x86_64得到了同样的错误3个重复符号
在我的情况下,我从同一项目的另一个文件复制代码,例如。 A.m文件的代码到B.m和complilation后我得到一个错误提到。我通过更改全局变量的名称来解决错误。
我的情况出现了这个错误,因为两个文件中的全局变量声明相同。
我今天也有这个错误。那是因为我在.m
文件中定义了一个const值。但是我定义了另一个.m
文件,它也包含了这个const值。这意味着它有两个相同的const值。所以出现这个错误。我的解决方案是在const值之前添加关键字“static
”。如:
static CGFloat const btnConunt = 9;
然后我构建项目,它不会报告此错误。
1.转到构建阶段2.搜索文件名3.删除重复 - >错误将消失。
如果没有,尝试搜索“file.m”,如果你看到任何#import“file.m”,清除这一行
愚蠢的一个,但要确保你没有#import
ed .m
文件错误的地方
我遇到了同样的错误
1.复制重复的符号文件(类名或框架名称),该文件刚刚显示在行的上方(架构x86_64的重复符号)。
2.将其粘贴到Find Navigator中,然后按enter键
它向我展示了重复的课程。我删除了重复的类并成功运行。
在我的例子中,我刚刚创建了一个头文件来定义这样的常量字符串:
NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";
我使用static
解决了这个问题:
static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";
我有同样的问题。在路径项目目标>构建设置>无公共块中的Xcode 7.2中,我将其更改为NO。
我发现接受的答案触及了问题,但没有帮助我解决它,希望这个答案将有助于解决这个非常令人沮丧的问题。
duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:
17 duplicate symbols for architecture x86_64
“表示您已经加载了两次相同的函数。由于从其他链接器标志中删除-ObjC后问题消失,这意味着此选项导致函数加载两次:”
通俗地说,这意味着我们的项目中有两个文件具有完全相同的名称。也许你正在将一个项目合并到另一个项目中?看一下“重复符号”错误上面的错误,看看哪个文件夹是重复的,在我看来是BLoginViewController。
例如,在下面的图像中,您可以看到我有两个BImageViewControllers,对我来说这就是导致问题的原因。
一旦我删除了一个,那么问题就消失了:)
当您在不同的类中声明具有相同名称的const变量时也会发生:
在文件Message.m中
const int kMessageLength = 36;
@implementation Message
@end
在文件Chat.m中
const int kMessageLength = 20;
@implementation Chat
@end
当我在两年前在Objective-C中开发的项目中接受“推荐设置”弹出窗口时,就会发生这种情况。
问题是,当您接受“推荐设置”更新时,Xcode会自动更改或添加一些构建设置,包括GCC_NO_COMMON_BLOCKS = YES;
。
这使我的更新项目中的duplicate symbol
错误导致构建失败。所以我在构建设置中将No Common Block
更改为NO
,错误消失了。
从其他链接器标志中删除-ObjC或者请检查您是否错误导入了任何.m文件而不是.h文件。