【问题标题】:Duplicate Symbols for Architecture arm64架构 arm64 的重复符号
【发布时间】:2014-12-05 21:08:16
【问题描述】:

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

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

【问题讨论】:

  • 这意味着你有太多的 BFAppLinkReturnToRefererView
  • 另外,您可能希望稍微清理一下您的项目,而不是链接到桌面上的框架。 :)
  • 就我而言,我添加了 extern NSString * const tColor;在 .h 文件和 NSString const *tColor = @"#000022";在两个不同的 .m 类中。
  • 你可以在这里找到你想要的东西stackoverflow.com/a/46678210/988941

标签: ios objective-c xcode linker-errors


【解决方案1】:

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

【讨论】:

  • 你就是男人!刚做了一个新的 xCode 7.3.1 项目,默认设置是 YES :(
  • Xcode 的“将项目更新到推荐设置”窗口为我打开了这个选项。
  • 你是最棒的
  • 无价的小费,但对我的情况没有帮助! :O
【解决方案2】:

从错误来看,FacebookSDK.framework 似乎已经包含 Bolts.framework 类。尝试从项目中删除额外的 Bolts.framework。

【讨论】:

  • 怎么做?请你一步一步指导我吗
  • 你有什么指南吗?
【解决方案3】:

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

将其转回 OFF 可以解决所有问题。

【讨论】:

  • 将项目更新为推荐设置,我该怎么做?我的意思是从哪个菜单?
  • @SazzadHissainKhan 它在您的构建设置中。
【解决方案4】:

我在降级 pod 时弄乱了我的 pod,我已经设法解决了 架构 arm64 的符号重复的问题,方法是删除 pod 并再次安装:

pod deintegrate
pod install

【讨论】:

  • 我使用的是通过 CocoPods - 3.9.0 集成的 Google Places SDK,这个答案解决了我的问题。
  • 谢谢,你帮我省了很多麻烦
  • 请注意,您必须指定要取消集成的确切项目。我建议从 xcode 本身而不是从您的文件资源管理器中拖动项目......有超过 450 个这些 arm64 错误......
  • 帮助将“No Common Blocks”编译器设置切换为 NO
  • 省时解答
【解决方案5】:

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

【讨论】:

  • 那是大声笑,但确实如此;D
  • 这只是发生在我身上.. 我把所有事情都归咎于代码完成
【解决方案6】:

另一个解决方案是:

选择项目 -> 目标 -> 构建阶段 -> 编译源代码 -> 搜索 对于最后一个错误行中提到的文件(在您的 案例 BFAppLinkReturnToRefererView.o)。

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

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

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

【讨论】:

  • 极度低估的答案,感谢您的帮助,卢卡斯! :)
  • 没问题很高兴它解决了你的问题:)
  • 这真的被低估了
【解决方案7】:

下面的补丁对我有用..:)

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

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

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

【讨论】:

  • 第 2 步:解决了我的问题。谢谢你:)
【解决方案8】:

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

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

总共有 143 个错误。 转到目标-> 构建设置-> 无公共块-> 将其设置为否。 这解决了这个问题。问题是集成项目有共同的代码块,因此无法编译它。说明可以找到here

【讨论】:

    【解决方案9】:

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

    SomeConstFile.h

    NSString * const kAConstant;
    

    SomeConstFile.m

    NSString *const kAConstant = @"a constant";
    

    早期版本的编译器假定头文件中的定义是外部的,因此在所有地方都包含 SomeConstFile.h 是可以的。

    现在您需要将这些 const 显式声明为 extern:

    SomeConstFile.h

    extern NSString * const kAConstant;
    

    【讨论】:

    • 谢谢!正在努力解决我正在创建的 constants.h 文件的问题,哈哈
    • 感谢您的回答我也面临同样的问题,您的回答对我有用...
    • 谢谢,过去 3-4 小时我一直在为这个问题苦苦挣扎
    【解决方案10】:

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

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

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

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

    P.S 我不是专家,但是当我遇到这个问题时,这就是我解决这个问题的方法。 :)

    【讨论】:

      【解决方案11】:

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

      【讨论】:

        【解决方案12】:

        对我来说,问题是 const 的创建风格,在这个 iOS8 之前它工作得很好。我有几行:

        int const kView_LayoutCount = 3;
        

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

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

        【讨论】:

          【解决方案13】:

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

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

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

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

          【讨论】:

            【解决方案14】:

            检查您的包含文件,我遇到了这个问题,因为我不小心#imported“filename.m”而不是“filename.h”,自动更正(制表符)放了一个“m”而不是“h”。

            【讨论】:

            • 非常感谢,我没有意识到我犯了这个错误,占用了我所有的时间。再次感谢?
            【解决方案15】:

            请更改设置。

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

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

            【讨论】:

              【解决方案16】:

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

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

              【讨论】:

                【解决方案17】:

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

                【讨论】:

                  【解决方案18】:
                  【解决方案19】:

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

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

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

                  【讨论】:

                    【解决方案20】:

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

                    【讨论】:

                      【解决方案21】:

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

                      【讨论】:

                        【解决方案22】:

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

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

                        【讨论】:

                          【解决方案23】:

                          如果有人在 Flutter 上进行实验,请不要尝试 pod deintegrate,pod init。

                          我解决的方法是运行flutter clean,flutter run -d [iOS Device]

                          希望可以帮助别人。

                          【讨论】:

                            【解决方案24】:

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

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

                            【讨论】:

                              【解决方案25】:

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

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

                              【讨论】:

                                【解决方案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){
                                
                                • xxx.h 中的声明,必须带有 extern
                                  • CrifanLibiOS.h
                                extern const int OPEN_OK;
                                

                                【讨论】:

                                  【解决方案27】:

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

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

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

                                  一年级学生的一个小发现,希望能帮到大家。

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 2017-04-01
                                    • 1970-01-01
                                    • 2020-07-31
                                    • 1970-01-01
                                    • 2015-06-15
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2014-11-14
                                    相关资源
                                    最近更新 更多