体系结构 arm64 的重复符号

Duplicate Symbols for Architecture arm64

提问人: 提问时间:10/11/2014 最后编辑:picciano 更新时间:11/17/2023 访问量:180904

问:

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

enter image description here

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

ios objective-c xcode 链接器错误

评论

1赞 Andrey Chernukha 10/11/2014
这意味着你有太多的 BFAppLinkReturnToRefererView
0赞 picciano 10/11/2014
此外,您可能希望稍微清理一下您的项目,而不是链接到桌面上的框架。:)
1赞 ios_dev 12/19/2017
就我而言,我添加了 extern NSString * const tColor;在 .h 文件和 NSString const 中 *tColor = @“#000022”;在两个不同的 .m 类中。
1赞 MoOx 2/14/2018
您可以在这里找到您要找的东西 stackoverflow.com/a/46678210/988941

答:

71赞 picciano 10/11/2014 #1

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

评论

41赞 Imdad Ali 12/30/2017
如何?你能一步一步地指导我吗
0赞 bdroid 1/20/2021
你有什么指南吗?
2赞 IsPha 6/24/2015 #2

井 有时,当使用像 FB 这样的 SDK 或像 Vuforia 或 GoogleAnalytics 这样的库时,添加示例项目可能会导致它们已经包含框架之类的问题,因此您必须确保在示例中已经包含符号时不要重复手动添加的符号

78赞 tania_S 9/23/2015 #3

对我来说,它有助于将“无公共块”编译器设置切换为 NO: 这似乎很有道理,设置在这里解释:GCC_NO_COMMON_BLOCKS是做什么用的?

评论

0赞 Yaro 6/16/2016
你就是那个男人!刚刚做了一个新的 xCode 7.3.1 项目,默认设置为 YES :(
6赞 commscheck 9/5/2016
Xcode 的“将项目更新为推荐设置”窗口为我打开了此选项。
0赞 showmyroutes 7/21/2018
你是最好的
2赞 Fattie 12/21/2018
无价的小费,但 Doh 对我的情况没有帮助!:O
9赞 ManyuBishnoi 4/20/2016 #4

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

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

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

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

PS 我不是专家,但这就是我遇到这个问题时解决这个问题的方式。:)

1赞 Karthick C 5/20/2016 #5

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

正在创建 AppDelegate.h 和 .m 文件多次创建。所以会发生这个错误。最后找到并删除了该类,它对我来说工作正常。

26赞 Jason Silver 7/29/2016 #6

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

评论

0赞 Vladimir 2/13/2017
这是哈哈,但真的;D
0赞 user426132 7/24/2019
这刚刚发生在我身上。我把代码完成归咎于每一个
54赞 Adam G 9/21/2016 #7

使用 Xcode 8,“将项目更新为推荐设置”选项为我的项目打开了“无公共块”。

将其调回 OFF 解决了所有问题。

评论

2赞 Sazzad Hissain Khan 1/27/2017
将项目更新为推荐的设置,我该怎么做?我的意思是从哪个菜单?
0赞 Trip 2/1/2017
@SazzadHissainKhan 它位于您的构建设置中。
11赞 2 revsiosCurator #8

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

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

共 143 个错误。 转到 Target->Build settings -> No Common Blocks-> 将其设置为 NO。 这解决了问题。问题在于集成项目具有共同的代码块,因此无法对其进行编译。可以在此处找到解释。

2赞 drew.. 10/3/2016 #9

对我来说,问题是 const 的创建风格,直到这个 iOS8 才运行良好。我有几行:

int const kView_LayoutCount = 3;

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

希望这对其他人有所帮助!

11赞 Dan Loughney 10/14/2016 #10

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

SomeConstFile.h

NSString * const kAConstant;

SomeConstFile.m

NSString *const kAConstant = @"a constant";

早期版本的编译器假定头文件中的定义是 extern,因此将 SomeConstFile.h 包含在各个位置就可以了。

现在,您需要将这些常量显式声明为 extern:

SomeConstFile.h

extern NSString * const kAConstant;

评论

1赞 Sung 5/23/2017
谢谢你!正在为我正在创建的constants.h文件的问题而苦苦挣扎,哈哈
1赞 reetu 6/24/2017
谢谢你的回答,我也面临同样的问题,你的回答对我有用......
1赞 Sumit Kumar Saha 9/9/2017
谢谢,在过去的 3-4 小时内,我一直在为这个问题而苦苦挣扎
19赞 Saumil Shah 6/7/2017 #11

下面为我打补丁..:)

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

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

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

评论

2赞 Dorald 4/14/2019
第 2 步:解决了我的问题。谢谢:)
0赞 cryptotheo 11/13/2022
启用可测试性对我来说是个问题!我做了很多研究来发现这一点!
1赞 Mahmoud abualamrien 6/13/2017 #12

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

2赞 user3693546 9/22/2017 #13

就我而言,理性太愚蠢了:

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

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

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

2赞 Mike Zriel 2/19/2018 #14

检查您的包含文件,我遇到了这个问题,因为我不小心 #imported“filename.m”而不是“filename.h”,自动更正(选项卡)输入“m”而不是“h”。

评论

0赞 Supertecnoboff 9/17/2019
非常感谢你,我没有意识到我犯了这个错误,占用了我所有的时间。再次👍感谢
28赞 user9168386 8/12/2018 #15

另一种解决方案是:

选择“项目”->“目标”-“>”生成阶段“->”编译源“->搜索 对于倒数第三行错误行中提到的文件(在您的 案例 BFAppLinkReturnToRefererView.o)。

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

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

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

评论

5赞 patreu22 10/15/2018
极度被低估的答案,谢谢你的帮助,卢卡斯!:)
0赞 10/15/2018
没问题,很高兴它解决了你的问题:)
0赞 yoyo 2/25/2021
这确实被低估了
0赞 Robo 3/1/2022
以上方法都不起作用,我有点绝望,但这是一个隐藏的宝石!
0赞 Nick K9 4/9/2022
我的问题是我正在从框架的包含副本切换到可可豆荚,但我忘记了框架仍在编译中。我从编译步骤中删除了框架的文件,错误消失了!非常感谢。
0赞 R. Mohan 10/30/2018 #16

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

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

我尝试将“无通用”块从“是”更改为“否”,然后将可测试性从“是”更改为“否”。它没有用。我在构建阶段也检查了重复文件,但没有重复文件。

0赞 Albert Renshaw 4/24/2019 #17

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

2赞 MobileMon 5/28/2019 #18

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

53赞 Matea 10/15/2019 #19

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

pod deintegrate
pod install

评论

0赞 andrewlundy_ 8/10/2020
我正在使用通过 CocoPods - 3.9.0 集成的 Google Places SDK,这个答案解决了我的问题。
0赞 Vladimir Sukanica 8/22/2020
谢谢,你为我省去了很多麻烦
0赞 Sanzio Angeli 9/22/2020
请注意,您必须指定要分解的确切项目。我建议从 xcode 本身拖动项目,而不是从文件资源管理器中拖动......有超过 450 个这样的 arm64 错误......
0赞 VyacheslavBakinkskiy 11/30/2020
帮助将“No Common Blocks”编译器设置切换为 NO
0赞 hbk 10/4/2021
省时的答案
1赞 potlood 10/17/2019 #20

请参见添加 NSManagedObject 子类时出现重复符号错误,重复链接

0赞 learner 12/25/2019 #21

我能够解决这个错误,上面写着“架构 armv7 有 158 个重复符号,架构 arm64 有 158 个重复符号”--- 如果这也是你得到的,那么这意味着你正在尝试编译一个文件,该文件正在导入或继承一个框架或静态库,其中包含对C++代码或文件的引用。处理此问题的一种简单方法是将 .m 文件的扩展名更改为 .mm。如果您使用的是 Objective C,这就是它的处理方式,但在 Swift 上不确定。

此外,在生成设置中 - 可以将“其他链接器标志”更新为 -lc++

2赞 Dx_ 4/22/2020 #22

如果有人在 Flutter 上尝试这样做,不要尝试 pod deintegrate,pod init。

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

希望可以帮助某人。

4赞 Dnyaneshwar Shinde 7/31/2020 #23

请更改设置。

第 1 步:转到 TARGETS -> Build Settings -> No Common Blocks -> No

第 2 步:转到 TARGETS -> Build Settings -> enable testability -> No

评论

0赞 Hardik Darji 6/18/2023
它不起作用
0赞 Albert Renshaw 10/25/2020 #24

当我有两个同名的文件时,我遇到了这个问题(大型项目,哎呀!

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

0赞 Mudassir 6/9/2021 #25

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

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

1赞 crifan 12/3/2021 #26

法典

  • CrifanLibiOS.h
const int OPEN_OK = 0;
  • CrifanLibiOS.m
#import "CrifanLibiOS.h"
...
// use the const int value
  if (OPEN_OK == openResult){

和:

  • 由其他 ObjC 文件包含
    • openFileViewController.m
#import "CrifanLibiOS.h"

错误

ld: 6 duplicate symbols for architecture arm64

原因

CrifanLibiOS.h多次导入,并多次重新定义const int

溶液

对于 ObjC,变量应更改为:const

  • xxx.m
    • CrifanLibiOS.m
#import "CrifanLibiOS.h"

const int OPEN_OK = 0;

...
// use the const int value
  if (OPEN_OK == openResult){
  • 声明中,必须与 externxxx.h
    • CrifanLibiOS.h
extern const int OPEN_OK;
1赞 Rinsuki 12/24/2021 #27

我正在做我的教程,然后我把答案分成不同的文件,并不是要把它们关联起来做一个大程序。

直到我注释掉“main.cpp”文件的剩余行,以确保程序可以单独运行而不受其影响,我才解决了这个问题。

我不太确定它的原理,但我认为这可能是由多个“main.cpp”文件的冲突引起的。

只是一个一年级学生的一点发现,希望可以帮助别人。

0赞 Jared Anderton 2/5/2022 #28

更改依赖项版本后,我在 Flutter 项目上有这个。我必须做以下事情:

pod deintegrate
flutter clean
pod install
3赞 Luke 6/12/2022 #29

当您按照官方文档的指导,通过 Swift Package Manager 安装 FireBaseAnalytics 和通过 CocoaPods 安装 Google AdMobs SDK 时,您会遇到此问题。你最终会得到重复的库。

我解决这个问题的方法是通过 CocoaPods 安装 FireBaseAnalytics 和 Google AdMobs SDK。

0赞 Lynx 10/31/2022 #30

对我来说,这是因为全局变量。 有一个类有一个全局变量,如下所示:

CGFloat cellHeight = 65;

我构建了一个新类,它没有连接到第一个类,它也得到了相同的变量。也就是说:

CGFloat cellHeight = 80;

因此,问题来了。 解决方案是添加一个来修改它,这样它就可以正常工作了。static

static CGFloat cellHeight = 80;
0赞 quan 1/29/2023 #31

我也有同样的问题。后来,我发现在自己的图书馆中向公众开放的文件存在问题。如果我只打开。h 文件给公众,就没问题了。enter image description here

0赞 Shay Elbaz 5/1/2023 #32

我在 Xcode 14.3 和 React Native 0.67.5 中使用 react-native-qrcode-scanner 的错误是:

架构 arm64 的 2 个重复符号

解决方案是: 添加这个:use_flipper!() 复制到 podfile。

  1. ios/Podfile
  2. 加:use_flipper!()
1赞 Rafa2602 10/25/2023 #33

由于提供的答案都没有为我解决问题,因此我想分享此解决方法:

  • 转到Targets -> {Your-App-Target} -> Build Settings -> Other Linker Flags
  • 替换为或仅添加(如果不存在)-Objc-ld64-ld64
  • 再次运行并生成应用Clean Build Folder

来源:

0赞 Vaibhav Moradiya 11/17/2023 #34

对我来说,问题是因为我复制了目标,.m文件也被复制了,并且两者的内容相似。这个问题很难找到,因为与其他资源文件一样,对于 .m 文件,它没有显示任何关于哪个部分是重复的提示。