build筑arm64的重复符号

当我尝试运行我的Xcode项目失败,并出现一个错误,指出我有重复的符号。 我在网上查找这些重复,但没有运气:

在这里输入图像说明

任何想法如何解决这一问题? 提前致谢!

从错误中可以看出,FacebookSDK.framework已经包含了Bolts.framework类。 尝试从项目中删除额外的Bolts.framework。

对我来说,它有助于将“No Common Blocks”编译器设置切换为NO:这看起来似乎有道理,这里的设置解释为: GCC_NO_COMMON_BLOCKS用于什么?

使用XCode8,“更新项目推荐设置”选项已打开“没有公共块”为我的项目。

将它重新设置为OFF可以修复所有的问题。

升级到Xcode 8时,我收到一条消息,要升级到推荐的设置。 我接受了,一切都被更新了。 我开始得到编译时间问题:

XXXX的重复符号XXXX的重复符号XXXX的重复符号

共有143个错误。 去目标 – >build立设置 – >没有公共块 – >设置为NO。 这解决了这个问题。 问题是整合的项目有共同的代码块,因此不能编译它。 说明可以在这里find。

对我来说,是我导入一个文件作为一个.m而不是一个.h错误

如果你正在移动到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; 

链接器尝试链接obj文件时发生此错误。 我能想到这个错误的几个原因是:

  1. 在项目中的两个不同的地方/文件中定义了复制的函数/类,只有其中一个被编译用于任何构build命令的变体。 但不知怎的,这两个文件都被编译到你的项目中。 因此,您需要检查if-else条件或其他依赖关系,这些依赖关系将src文件添加到需要编译的文件列表中,并为特定的构build命令删除不需要的文件。

  2. 重复的函数/类是在项目中的两个不同的地方/文件意外定义的。 删除错误的定义。

  3. 在再次构build之前清理OBJ目录,从以前的版本可能会有一些旧的obj文件可能导致这种冲突。

PS我不是专家,但是这是我如何解决这个问题,当我面对它。 🙂

那么有时候使用像FB或者Vuforia这样的SDK或者GoogleAnalytics这样的库,添加示例项目可能会导致他们已经包含Frameworks的问题,所以您必须确保不会在您已经手动添加的时候重复添加符号包括在样本中

在我的情况下,原因太愚蠢了:

我有一个Constant.h文件,我已经定义了macros。 我想在那里做NSString。 做到这一点:

 NSString const *kGreenColor = @"#00C34E"; 

这导致架构arm64和连接器命令失败,退出代码1的重复符号的问题。 删除常量NSString线为我工作。

从错误,它会出现任何类出现多次。find并删除该类将工作。

我创build了多次创buildAppDelegate.h和.m文件。 所以这个错误将会发生。最后find并删除这个类对我来说工作正常。

对我来说,问题是创buildconst的风格,这工作得很好,直到这个iOS8 ..我有几行:

 int const kView_LayoutCount = 3; 

在我的.h文件中。 一旦普通块设置为NO,六行就会导致636个链接器文件。 (如果是14k +)。 在剥离价值声明的.h之后将行移动到.m,编译好。

希望这可以帮助别人!

下面补丁为我工作.. 🙂

 Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No Step 2: Go to TARGETS -> Build Settings -> enable testability -> No 

把它设回NO解决了问题!

解决这个问题去构build阶段和search像(FacebookSDK,单位)重复文件和删除(扩展名file.o),然后再次build立。