我现在对上面的标题有同样的问题,但还没有找到正确的答案.我收到了错误:
/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
.删除此值后,我可以成功构建我的项目,但我不知道为什么.有谁能解释一下?
我在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 };
如果有人对此有解释,请赐教.
对我来说,将"No Common Blocks"从Yes更改为No(在Targets-> Build Settings-> Apple LLVM - Code Generation下)修复了问题.
愚蠢的,但要确保你没有#import
在.m
某处错误地编辑过文件
在多个类中的@implementation下定义相同的变量也会导致此问题.
我发现接受的答案触及了问题,但没有帮助我解决它,希望这个答案将有助于解决这个非常令人沮丧的问题.
duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in: 17 duplicate symbols for architecture x86_64
"表示您已经加载了两次相同的函数.由于从其他链接器标志中删除-ObjC后问题消失,这意味着此选项导致函数加载两次:"
通俗地说,这意味着我们的项目中有两个文件具有完全相同的名称.也许你正在将一个项目合并到另一个项目中?看一下"重复符号"错误上面的错误,看看哪个文件夹是重复的,在我看来是BLoginViewController.
例如,在下面的图像中,您可以看到我有两个BImageViewControllers,对我而言,这就是导致问题的原因.
一旦我删除了一个,那么问题就消失了:)
我有同样的问题.在路径项目目标>构建设置>无公共块中的Xcode 7.2中,我将其更改为NO.
架构x86_64的75个重复符号
表示您已经加载了两次相同的功能.由于问题进行去除后消失 -ObjC
的Other Linker Flags,
,这意味着该选项结果是功能加载两次:
来自技术问答
此标志使链接器加载定义Objective-C类或类别的库中的每个目标文件.虽然此选项通常会导致更大的可执行文件(由于加载到应用程序中的其他对象代码),但它将允许成功创建包含现有类的类别的有效Objective-C静态库.
https://developer.apple.com/library/content/qa/qa1490/_index.html
以下步骤解决了我的问题.
转到目标设置中的构建阶段.
转到"使用库链接二进制".
检查是否存在任何库两次.
再建一次.
对于我在Xcode8推荐的项目设置期间,将"No Common Blocks"更新为YES会导致此问题.
前往目标
选择构建设置
搜索“ No Common Blocks”,将其选择为NO。
对我有用
当我在两年前在Objective-C中开发的项目中接受"推荐设置"弹出窗口时,就会发生这种情况.
问题是,当您接受"推荐设置"更新时,Xcode会自动更改或添加一些构建设置,包括GCC_NO_COMMON_BLOCKS = YES;
.
这使得构建失败并且duplicate symbol
更新了我的更新项目中的错误.所以我改变了No Common Block
对NO
我的构建设置和错误不见了.
当您在不同的类中声明具有相同名称的const变量时也会发生:
在文件Message.m中
const int kMessageLength = 36; @implementation Message @end
在文件Chat.m中
const int kMessageLength = 20; @implementation Chat @end
从其他链接器标志中删除-ObjC或者请检查您是否错误导入了任何.m文件而不是.h文件.
找到副本的最快方法是:
转到目标
转到构建阶段
转到编译源
删除重复文件.
就我而言,该位置有两个同名的文件
目标>构建阶段>编译源并删除任何重复的文件.
在我的例子中,我刚刚创建了一个头文件来定义这样的常量字符串:
NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";
我使用static
以下方法解决了这个问题
static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";