当我尝试运行Xcode Project时,它失败并出现错误,指出我有重复的符号。我在网上查看了发现这些重复项的地方,但是没有运气:
任何想法如何解决这一问题?
当我尝试运行Xcode Project时,它失败并出现错误,指出我有重复的符号。我在网上查看了发现这些重复项的地方,但是没有运气:
任何想法如何解决这一问题?
Answers:
对我来说,这有助于将“ No Common Blocks”编译器设置切换为NO:这似乎很有道理,该设置在此处进行了解释: GCC_NO_COMMON_BLOCKS用于什么?
使用Xcode 8,“将项目更新为建议的设置”选项为我的项目打开了“没有通用块”。
将其重新设置为OFF可修复所有问题。
我在降级吊舱时弄乱了吊舱,并设法通过删除吊舱并再次安装它们来解决体系结构arm64重复符号的问题:
pod deintegrate
pod install
另一个解决方案是:
选择“ 项目” ->“ 目标” ->“ 构建阶段” ->“ 编译源” ->“搜索最后一个错误第三行中提到的文件”(在您的情况下为BFAppLinkReturnToRefererView.o)。
然后,您会在搜索结果中看到1个或2个文件。
删除其中之一,然后再次编译。现在应该重新编译,因为仅剩一个文件,没有更多的生成冲突。
如果这样不起作用,则文件中可能包含错误,您应该删除所有错误,然后重新编译。它应该再次工作。
升级到Xcode 8时,我收到一条消息,要求升级到推荐设置。我接受了,一切都更新了。我开始遇到编译时间问题:
XXXX的重复符号XXXX的重复符号XXXX的重复符号
总共143个错误。转到目标->构建设置->无通用块->将其设置为否。这解决了问题。问题在于集成项目具有共同的代码块,因此无法对其进行编译。可以在这里找到解释。
当链接器尝试链接obj文件时,会发生此错误。我能想到的这个错误的几个原因是:
复制的功能/类在项目中的两个不同的位置/文件中定义,并且对于构建命令的任何变体,仅其中一个应被编译。但是无论如何,这两个文件都已在您的项目中编译。因此,您需要检查if-else条件或其他依赖项,这会将src文件添加到需要编译的文件列表中,并删除特定构建命令不需要的文件。
在项目中的两个不同位置/文件中意外地定义了重复的功能/类。删除错误的定义。
在再次构建之前,请清理您的OBJ目录,以前的构建中可能包含一些旧的obj文件,这可能会导致此冲突。
附言:我不是专家,但这是我面对此问题时所解决的方法。:)
如果您要使用Xcode 7或8,并且正在打开一个非常老的项目,那么我会遇到此问题:
在 SomeConstFile.h
NSString * const kAConstant;
在 SomeConstFile.m
NSString *const kAConstant = @"a constant";
较早版本的编译器假定头文件中的定义是extern,因此在各处包含SomeConstFile.h都很好。
现在,您需要将这些const显式声明为extern:
在 SomeConstFile.h
extern NSString * const kAConstant;
以下补丁为我工作.. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
将其设置回NO即可解决问题!
就我而言,原因太愚蠢了:
我有一个Constant.h文件,其中定义了宏。我想到在那里做NSString。并这样做:
NSString const *kGreenColor = @"#00C34E";
这导致体系结构arm64和链接器命令符号重复的问题,退出代码为1。删除const NSString行对我有用。
检查您的包含文件,我遇到了这个问题,因为我不小心#import了“ filename.m”而不是“ filename.h”,自动更正(选项卡)放了一个“ m”而不是“ h”。
要解决此问题,请转到构建阶段并搜索(facebookSDK,unityads)之类的重复文件并删除(扩展名file.o),然后再次构建。
我能够解决此错误,该错误为“体系结构armv7的158个重复符号,体系结构arm64的158个重复符号” ---如果这也是您得到的,则意味着您正在尝试编译正在导入的文件或继承引用了C ++代码或文件的框架或静态库。一种简单的处理方法是将.m文件的扩展名更改为.mm。如果您使用的是Objective C,则这是如何处理的,但是不确定在Swift上如何处理。
同样在构建设置中-您可以将“其他链接器标志”更新为-lc ++
请更改设置。
步骤1:转到TARGETS-> Build Settings-> No Common Blocks-> No
步骤2:转到TARGETS-> Build Settings->启用可测试性-> No