架构arm64的重复符号

时间:2014-10-10 16:18:26

标签: ios objective-c xcode linker-errors

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

enter image description here

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

25 个答案:

答案 0 :(得分:63)

对我来说,它有助于将“No Common Blocks”编译器设置切换为NO: 它似乎很有意义,设置在这里解释: What is GCC_NO_COMMON_BLOCKS used for?

答案 1 :(得分:55)

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

答案 2 :(得分:45)

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

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

答案 3 :(得分:17)

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

答案 4 :(得分:10)

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

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

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

答案 5 :(得分:9)

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

SomeConstFile.h

中的

NSString * const kAConstant;
SomeConstFile.m

中的

NSString *const kAConstant = @"a constant";

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

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

SomeConstFile.h

中的

extern NSString * const kAConstant;

答案 6 :(得分:8)

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

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

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

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

  4. P.S我不是专家,但这是我面对时解决这个问题的方法。 :)

答案 7 :(得分:7)

以下Patch为我工作.. :))

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

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

将其设置为NO解决了问题!

答案 8 :(得分:4)

我在降级吊舱时弄乱了吊舱,并且设法通过删除吊舱并使用以下命令重新安装吊舱来解决体系结构arm64重复符号的问题。

pod deintegrate
pod install

答案 9 :(得分:4)

另一个解决方案是:

  

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

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

删除其中之一,然后再次编译。现在应该重新编译,因为只剩下一个文件,并且不再有构建冲突。

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

答案 10 :(得分:2)

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

答案 11 :(得分:2)

在我的情况下,理由太愚蠢了:

我有一个Constant.h文件,我在其中定义了宏。 我想在那里做NSString。并做到了这一点:

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

这导致了架构arm64的重复符号问题  和链接器命令失败,退出代码为1. 删除const NSString行为我工作。

答案 12 :(得分:2)

对我来说,问题是const的创建风格,在iOS8之前工作正常..我有几行:

int const kView_LayoutCount = 3;

在我的.h文件中。一旦公共块设置为NO,六行就会产生636个链接器文件。 (如果是,则为14k +)。在剥离值声明的.h之后将行移动到.m并且编译很好。

希望这有助于其他人!

答案 13 :(得分:1)

要解决此问题,请转到构建阶段并搜索重复文件 喜欢(facebookSDK,unityads)和删除(扩展名file.o)然后重新构建。

答案 14 :(得分:1)

从错误中看,任何类都会出现多次出现。找到并删除它将起作用的类。

创建多次创建AppDelegate.h和.m文件。所以这个错误就会发生。最后找到并删除那些它对我来说工作正常的课程。

答案 15 :(得分:0)

检查你的包含文件,我有这个问题,因为我不小心#imported" filename.m"而不是" filename.h",autocorrect(tab)放一个" m"不是" h"。

答案 16 :(得分:0)

对我来说,我在ViewController_A中创建了一个名为sampleMethod的方法,也在ViewController_B中也创建了相同的方法,这导致了此错误,然后我将ViewController_B中的方法名称更改为secondSampleMethod。它修复了错误。

似乎是一种很好的功能,可以减少代码并且在很多地方不重复相同的代码。

我尝试将No Common块从Yes更改为No,然后将可测试性从Yes更改为No。这没有用。我还在构建阶段检查了重复文件,但是没有重复文件。

答案 17 :(得分:0)

我遇到了这个问题,因为我在方法之外的.m中懒惰地定义了一个变量,然后在另一个.m文件中,我在方法之外定义了另一个具有相同名称的变量。这导致了全局变量名重复的问题。

答案 18 :(得分:0)

对我来说,问题是我手动添加了一个框架,但后来又在CocoaPods中包含了相同的框架,但我不知道这样做了。一旦我删除了另一个,问题就消失了

答案 19 :(得分:0)

答案 20 :(得分:0)

我能够解决此错误,该错误是“体系结构armv7的158个重复符号,体系结构arm64的158个重复符号” ---如果这也是您得到的,则表示您正在尝试编译一个文件是导入或继承具有对C ++代码或文件的引用的框架或静态库。一种简单的处理方法是将.m文件的扩展名更改为.mm。如果您使用的是Objective C,就可以通过这种方式进行处理,尽管不确定在Swift上。

也在您的构建设置中-您可以将“其他链接器标志”更新为-lc ++

答案 21 :(得分:0)

如果有人正在Flutter上进行这项实验,请不要尝试将Pod分解或Pod init。

我如何解决的是运行flutter干净,flutter run -d [iOS设备]

希望可以帮助别人。

答案 22 :(得分:0)

Plz更改设置。

第1步:转到“目标”->“构建设置”->“没有通用块”->“否”

第2步:转到目标->构建设置->启用可测试性->否

答案 23 :(得分:0)

当我有两个偶然具有相同名称的文件时,我遇到了这个问题(大项目,哎呀!)

具有讽刺意味的是,它们实际上是相同的文件,我只是忘记了几周前我已经创建了一个文件作为占位符,并再次给它起了相同的名字,哈哈!

答案 24 :(得分:0)

有时它可以在 Xcode 中使用 command+shift+k 进行缓存清理

我的问题是我有多个同名的文件,所以我删除了重复的文件,在控制台中你可以看到文件名 希望能帮到人。