架构arm64的重复符号

95 xcode objective-c linker-errors ios

当我尝试运行我的Xcode项目时,它失败并显示一条错误,指出我有重复的符号.我在网上查找了这些重复但没有运气的地方:

在此输入图像描述

任何想法如何解决这一问题?

小智 68

对我来说,它有助于将"No Common Blocks"编译器设置切换为NO:它似乎很有意义,此处解释了设置: GCC_NO_COMMON_BLOCKS用于什么?

  • Xcode的"将项目更新为推荐设置"窗口为我启用了此选项. (4认同)
  • 无价的小费,但对我来说没有帮助!:哦 (2认同)

pic*_*ano 63

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

  • 如何?能不能一步一步指导我 (19认同)

Ada*_*m G 48

使用Xcode 8,"将项目更新为推荐设置"选项为我的项目打开了"No Common Blocks".

将其恢复为OFF可以解决所有问题.

  • 将项目更新为推荐设置,我该怎么做?我的意思是从哪个菜单? (2认同)

小智 41

我在降级 pod 时弄乱了我的 pod,并且通过删除 pod 并再次安装它们,我设法解决了架构 arm64 重复符号的问题:

pod deintegrate
pod install
Run Code Online (Sandbox Code Playgroud)


Jas*_*ver 21

对我来说,我错误地导入了.m而不是.h的文件


ios*_*tor 10

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

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

共有143个错误.去目标 - >构建设置 - >没有公共块 - >将其设置为NO.这解决了这个问题.问题是集成项目有共同的代码块,因此无法编译它.可以在这里找到解释.


Dan*_*ney 9

如果您要转移到Xcode 7或8并打开一个非常古老的项目,我遇到了这个问题:

SomeConstFile.h

NSString * const kAConstant;
Run Code Online (Sandbox Code Playgroud)

SomeConstFile.m

NSString *const kAConstant = @"a constant";
Run Code Online (Sandbox Code Playgroud)

早期版本的编译器假定头文件中的定义是extern,所以包括SomeConstFile.h在内的所有地方都很好.

现在你需要明确声明这些consts为extern:

SomeConstFile.h

extern NSString * const kAConstant;
Run Code Online (Sandbox Code Playgroud)


小智 8

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

  1. 复制的函数/类在项目中的两个不同的位置/文件中定义,并且只有其中一个应该编译用于构建命令的任何变体.但不知何故,这些文件都在您的项目中编译.因此,您需要检查if-else条件或将src文件添加到需要编译的文件列表中的其他依赖项,并删除特定构建命令的不需要的文件.

  2. 在项目中的两个不同位置/文件中意外定义了重复的Function/Class.删除错误的定义.

  3. 在再次构建之前清理OBJ目录,可能存在一些旧的obj文件,这些文件可能会导致此冲突.

PS我不是专家,但这是我面对它时如何解决这个问题.:)


Sau*_*hah 8

以下补丁为我工作.. :)

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

Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Run Code Online (Sandbox Code Playgroud)

将其设置回NO即可解决问题!

  • 步骤2:解决了我的问题。谢谢 :) (2认同)

小智 7

另一个解决方案是:

选择“ 项目” ->“ 目标” ->“ 构建阶段” ->“ 编译源” ->“搜索最后一个错误第三行中提到的文件”(在您的情况下为BFAppLinkReturnToRefererView.o)。

然后,您会在搜索结果中看到1个或2个文件。

删除其中之一,然后再次编译。现在应该重新编译,因为仅剩一个文件,没有更多的生成冲突。

如果这样不起作用,则文件中可能包含错误,您应该删除所有错误,然后重新编译。它应该再次工作。

  • 答案被低估了,卢卡斯,谢谢您的帮助!:) (2认同)

归档时间:

查看次数:

78741 次

最近记录:

5 年,9 月 前