Xcode下架构x86_64的重复符号

时间:2014-06-19 03:08:09

标签: ios objective-c xcode5

我现在对上面的标题有同样的问题,但还没有找到正确的答案。我收到了错误:

    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
duplicate symbol _OBJC_METACLASS_$_MoboSDK in:
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Intermediates/TestMoboSDK-Client.build/Debug-iphonesimulator/TestMoboSDK-Client.build/Objects-normal/x86_64/MoboSDK.o
    /Users/nle/Library/Developer/Xcode/DerivedData/TestMoboSDK-Client-cgodalyxmwqzynaxfbbewrooymnq/Build/Products/Debug-iphonesimulator/libMoboSDK.a(MoboSDK.o)
ld: 75 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

感谢任何帮助。

最后我找出了此错误的原因,因为我将-ObjC添加到Other Linker Flags。删除此值后,我可以成功构建我的项目,但我不知道为什么。谁能解释一下呢?

55 个答案:

答案 0 :(得分:240)

对我而言,改变“没有共同的障碍”。从Yes到No(在Targets-> Build Settings-> Apple LLVM - Code Generation)修复了问题。

答案 1 :(得分:230)

愚蠢的一个,但请确保您在某个地方错误地#import .m编辑了{{1}}个文件

答案 2 :(得分:89)

  

架构x86_64的75个重复符号

表示您已经加载了两次相同的功能。 从-ObjC移除Other Linker Flags,后问题消失 这意味着此选项导致函数加载两次:

来自Technical Q& A

  

此标志使链接器加载库中的每个目标文件   定义Objective-C类或类别。虽然这个选项会   通常会导致更大的可执行文件(由于额外的目标代码   加载到应用程序中),它将允许成功创建   包含类别的有效Objective-C静态库   现有的课程。

https://developer.apple.com/library/content/qa/qa1490/_index.html

答案 3 :(得分:47)

就我而言,我刚创建了一个头文件来定义这样的常量字符串:

NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

我使用static

解决了这个问题
static NSString *const AppDescriptionString = @"Healthy is the best way to keep fit";

答案 4 :(得分:31)

我有同样的问题。 在路径项目目标中的Xcode 7.2中>构建设置>没有公共区块,我将其更改为NO。

答案 5 :(得分:28)

当我接受"推荐的设置"弹出我两年前在Objective-C开发的项目。

问题在于,当您接受"推荐的设置"更新,Xcode自动更改或添加了一些构建设置,包括GCC_NO_COMMON_BLOCKS = YES;

这使我的更新项目中的duplicate symbol错误导致构建失败。所以我在构建设置中将No Common Block更改为NO,错误消失了。

答案 6 :(得分:28)

当您在不同的类中声明具有相同名称的const变量时也会发生:

在文件Message.m

const int kMessageLength = 36;

@implementation Message

@end

在文件Chat.m

const int kMessageLength = 20;

@implementation Chat

@end

答案 7 :(得分:28)

我发现接受的答案触及了问题,但没有帮助我解决问题,希望这个答案能帮助解决这个非常令人沮丧的问题。

duplicate symbol _OBJC_IVAR_$_BLoginViewController._hud in:

17 duplicate symbols for architecture x86_64

"表示您已经加载了两次相同的功能。由于从其他链接器标志中删除-ObjC后问题消失,这意味着该选项导致函数加载两次:"

在外行人的术语中,这意味着我们的项目中有两个文件具有完全相同的名称。也许你正在将一个项目合并到另一个项目中?看看"重复符号"之上的错误。错误,看看哪个文件夹是重复的,在我的例子中是BLoginViewController。

例如,在下面的图片中,您可以看到我有两个BImageViewControllers,对我而言,这就是导致问题的原因。

一旦我删除了一个,那么问题就会消失:)

enter image description here

答案 8 :(得分:13)

在安装Cocoapods之后,我遇到了这个问题。现在,每次我更新一些Pod时都会发生。我发现的解决方案:

转到终端:

1) pod deintegrate
2) pod install

此外,在“构建设置”中选中“始终嵌入Swift库”项。应该“褪色”以表示它正在使用默认配置。如果将其设置为手动,则单击“删除”以将其还原为默认配置。这停止了​​行为。

答案 9 :(得分:13)

从其他链接器标志中删除-ObjC或 请检查您是否错误地导入了任何.m文件而不是.h。

答案 10 :(得分:12)

以下步骤解决了我的问题。

  1. 转到目标设置中的构建阶段。
  2. 转到“使用库链接二进制文件”。
  3. 检查是否存在任何库两次。
  4. 再次建造。

答案 11 :(得分:12)

找到副本的最快方法是:

  1. 转到目标
  2. 转到Build Phases
  3. 转到编译源
  4. 删除重复文件。

答案 12 :(得分:9)

在多个类的@implementation下定义相同的变量也会导致此问题。

答案 13 :(得分:8)

我在Xcode 7.3中打开一些遗留项目的情况是:

duplicate symbol _SomeEnumState in:

后面是两个不相关的文件列表。然后重复几次,最后:

ld: 8 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为我解决的是改变枚举声明:

enum SomeEnumState {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
} SomeEnumState;

到此:

typedef NS_ENUM(NSUInteger, SomeEnumState) {
    SomeEnumStateActive = 0,
    SomeEnumStateUsed = 1,
    SomeEnumStateHidden = 2
};

如果有人对此有解释,请赐教。

答案 14 :(得分:8)

就我而言,位置

中有两个同名的文件
  

目标>构建阶段>编译源并删除任何重复文件。

答案 15 :(得分:6)

  • 转到目标
  • 选择构建设置
  • 搜索 “无常用块” ,选择

它对我有用

答案 16 :(得分:5)

对于我来说,Xcode8推荐的项目设置更新"没有通用块"到YES导致此问题。

答案 17 :(得分:4)

更新2020年Xcode 11.X的答案:


import "package:flutter/material.dart";
import "dart:convert";
import "package:http/http.dart" as http;

class JsonMultyParse extends StatefulWidget {
  @override
  _JsonMultyParseState createState() => _JsonMultyParseState();
}

class _JsonMultyParseState extends State<JsonMultyParse> {
  final String apiURL = 'https://jsonplaceholder.typicode.com/users';
  List<dynamic> users = [];
  void fetchJSONData() async {
    var jsonResponse = await http.get(apiURL);

    if (jsonResponse.statusCode == 200) {
      final jsonItems =
          json.decode(jsonResponse.body).cast<Map<String, dynamic>>();
      print(jsonItems[0]["address"]["street"]);
      setState(() {
        users = jsonItems;
      });

      for (dynamic user in users) {
        print(user["address"]["street"]);
      }
    } else {
      throw Exception('Failed to load data from internet');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        debugShowCheckedModeBanner: false,
        home: Scaffold(
          body: Container(
            child: Column(
              children: <Widget>[
                SizedBox(height: 20),
                RaisedButton(
                  onPressed: fetchJSONData,
                  child: Text("Fetch Data"),
                ),
                Expanded(
                  child: ListView.builder(
                      itemCount: users.length,
                      itemBuilder: (context, index) {
                        return Card(
                          child: Container(
                            height: 50,
                            padding: const EdgeInsets.all(8.0),
                            child: Text(
                              users[index]["address"]["street"],
                            ),
                          ),
                        );
                      }),
                )
              ],
            ),
          ),
        ));
  }
}



希望有帮助!

答案 18 :(得分:3)

与Juice007类似,我在两个不同的.m文件中声明并初始化了一个C类型变量(未导入!)

BOOL myVar = NO;
然而,这种声明和初始化变量的方法,即使在.m中也是如此,即使在@implementation中,它也会授予它全局范围。您的选择是:

  1. 将其声明为static,将范围限制为class:

    static BOOL myVar = NO;
    
  2. 删除初始化(这将使两个类共享全局变量):

    BOOL myVar;
    -(void) init{
        myVar = NO;
    }
    
  3. 将其声明为属性:

    @property BOOL myVar;
    
  4. 在@interface

    中将其声明为正确的iVar
    @interface myClass(){
        BOOL myVar;
    }
    @end
    

答案 19 :(得分:3)

今天,我遇到了同样的错误。错误的关键字是duplicate。我解决了:

1. Remove the duplicate file at Build Phases-->Compile Sources
2. If you can not remove it at Build Phases, you need find the file at your project and remove the reference by DELETE :

remove reference

3. Add the file to your project again
4. Add the file's .m to your Build Phases-->Compile Sources again
5. Build your project, the error will disappear

答案 20 :(得分:3)

确保您没有意外导入.m文件,您可能希望在“项目”窗口中删除派生数据,然后再构建并运行。

答案 21 :(得分:3)

在我的项目中,我在项目中定义了两个main()方法,删除其中一个解决了问题。

答案 22 :(得分:3)

添加pod存储库时出现了同样的错误

pod 'SWRevealViewController'

来自gitHub的已添加的源代码(SWRevealViewController)。因此,错误将通过删除源代码或pod存储库来修复。

案例#2:

第二次,当我在.h 文件中声明常量时出现此错误。

NSString * const SomeConstant  = @"SomeValue";
@interface AppDelegate : UIResponder <UIApplicationDelegate> {
...
...

答案 23 :(得分:3)

对于遇到此问题的其他人,我在任何这些答案中都没有看到我的解决方案。

在手动解决了一个.pbxproj合并冲突后(尽管很差),.pbxproj中有对单个类文件的重复引用。从项目中删除那些&gt;构建阶段&gt; Compile Sources为我修复了一切。

希望这可以帮助有人下线。

答案 24 :(得分:3)

因为我还没有看到这个答案:

卸载并重新安装您的Podfile! Remove or uninstall library previously added : cocoapods

在构建我的应用程序时,我已经遇到过3次以上的问题,而每次修复该问题时,我都会遇到此问题。 :)

答案 25 :(得分:2)

当您将任何库或文件链接两次时,通常会发生此错误。在错误描述中,将列出重复文件的名称,您可以搜索并确保没有重复项。如果您发现重复,请删除对其中一个的引用以发挥安全性

答案 26 :(得分:2)

我面临同样的错误

1.复制重复的符号文件(类名或框架名称),该文件刚刚显示在行的上方(结构x86_64的重复符号)。

<强> 2。将其粘贴到Find Navigator中,然后按Enter键

它向我展示了重复的课程。我删除了重复的类并成功运行。

答案 27 :(得分:2)

1.转到构建阶段 2.搜索文件名 3.删除重复 - &GT;错误将消失。

如果没有,请尝试搜索“file.m”,如果您看到任何#import“file.m”,请清除此行

答案 28 :(得分:2)

我今天也有这个错误。那是因为我在.m文件中定义了一个const值。但是我定义了另一个包含此const值的.m文件。那个&#39 ; s表示它有两个相同的const值。因此出现此错误。 我的解决方案是添加一个关键字&#34; static&#34;在const值之前。例如:

static CGFloat const btnConunt = 9;

然后我构建了它赢得的项目并没有报告此错误。

答案 29 :(得分:2)

我希望它一定能帮到你

我得到了同样的错误 3个重复符号,用于架构x86_64

在我的情况下,我从同一项目的另一个文件中复制了代码,例如。 A.m文件的代码到B.m和complilation后我得到一个错误提到。我通过更改全局变量的名称来解决错误。

这个错误出现在我的案例中,因为两个文件中的全局变量声明相同。

答案 30 :(得分:2)

导致此错误的另一个愚蠢错误是重复文件。我不小心复制了一些文件两次。首先我去了目标 - &gt;构建阶段 - &gt;编译来源。在那里,我注意到该列表上的一些文件及其位置。

答案 31 :(得分:2)

当我在我的项目中整合lob项目时,同样的问题发生在我身上。

enter image description here

实际上lob项目也有AFNetworking文件, 所以我从lob项目中删除了.m文件。

enter image description here

实际上.m文件与我的项目POd / AFNetworking / .m文件冲突

enter image description here

答案 32 :(得分:2)

在Xcode 6.3.2中。我检查了所有可能性如下所示

1:我的项目中没有导入.m文件。

2:从其他链接器标记中删除了-ObjC

3:删除了所有派生数据

我仍然得到同样的错误。 我通过从.pch文件中删除任何变量声明来删除此错误。就我而言,我在AppDelegate文件中声明了.pch个对象。最后我找到了导致错误的原因。所以我从.pch文件和我的项目工作魅力中删除任何变量的声明。

答案 33 :(得分:2)

最近一直在寻找错误来源。我很奇怪,当我发现我的应用程序不想编译时,只是因为我在不同的类中有以下代码片段:

dispatch_time_t getDispatchTimeByDate(NSDate *date)
{
    NSTimeInterval interval;
    double second, subsecond;
    struct timespec time;
    dispatch_time_t milestone;


    interval = [date timeIntervalSince1970];
    subsecond = modf(interval, &second);
    time.tv_sec = second;
    time.tv_nsec = subsecond * NSEC_PER_SEC;
    milestone = dispatch_walltime(&time, 0);

    return milestone;
}

希望这可能有助于某人。

答案 34 :(得分:2)

上述解决方案都不适用于我,我自己就修好了。

我得到了core data model的重复符号,我自己制作了,但是 在我的.xcdatamodeld检查员中,我选择Class Definition Codegen属性,我猜这是错误的。然后我选择Manual/None,它已得到修复。

希望这对你有所帮助!

答案 35 :(得分:1)

以上答案对我不起作用。这是我的解决方法:

1)在finder中,删除整个Pods文件夹和Podfile.lock文件 2)关闭xcode项目 3)在终端中运行pod install 4)打开xcode项目,运行clean build命令

之后为我工作。

答案 36 :(得分:1)

如果您在头文件中定义了一些常用函数,请将它们更改为 inline

答案 37 :(得分:1)

我也有这个错误。发现问题是在全局范围内声明的具有相同名称的变量在要编译到程序中的整个文件中重复出现。将全局变量的局部范围更改为伪main函数后,错误便得以解决。

答案 38 :(得分:1)

我只是迷惑了这个问题。 pod deintegrateRemoving podfile.lock方式对您会有所帮助,但是请尝试以下顺序,这可能比分解pod文件更有用

  • 评论Podfile中的所有吊舱
  • 运行pod install,它将从项目中删除Pods文件夹
  • 取消注释Podfile中的所有吊舱
  • 再次运行pod install

答案 39 :(得分:1)

如果您正在使用并且认为它可能是您的豆荚,请尝试以下操作:

pod deintegrate
pod install

答案 40 :(得分:1)

有时候,当您导入的文件不正确时(例如ex。),就会发生这种情况:

  

导入“ MenuItem.m”

代替

  

导入“ MenuItem.h”

这将抛出重复错误 x86_64体系结构的重复符号

答案 41 :(得分:1)

从其他链接器标志中删除-all_load。它适用于我的项目

答案 42 :(得分:1)

此答案很好地说明了为什么会出现此问题:

Xcode C++ :: Duplicate Symbols for Architecture x86_64

我认为您不需要关闭任何标志或更改Xcode设置,重新读取代码并解决问题。更改设置只会消除炎症而不是原因。

答案 43 :(得分:1)

确保您没有导入[ViewController.m]而不是头文件

#import "ViewController.m"

答案 44 :(得分:0)

请检查添加的Pod和库。应该有一个或多个重复的库。请从一侧将其卸下。我将解决此问题。并且受影响的库将在x代码错误消息详细信息中列出。

答案 45 :(得分:0)

您可以尝试清除plugin文件夹下的所有插件吗?

对我有用

答案 46 :(得分:0)

就我而言,我将核心数据模型的实体命名为与Object相同。 所以:我定义了一个对象&#34; Event.h&#34;同时我把这个实体称为&#34; Event&#34;。我最终重命名了实体。

答案 47 :(得分:0)

只需卸载与之相关的Pod,然后重新安装它们即可。

答案 48 :(得分:0)

上述答案均无济于事,因为我在Pod和本地存储的框架中都遇到类似的错误,

duplicate symbol '_OBJC_METACLASS_$_EZAudioDevice' in:
    /Users/(yourUserName)/Desktop/Source Code/(yourProjectName)/Pods/AudioKit/iOS/AudioKit.framework/AudioKit(EZAudioDevice.o)
    /Users/(yourUserName)/Desktop/Source Code/(yourProjectName)/ChirpSDK.framework/ChirpSDK(EZAudioDevice.o)

因此解决方法是在项目中找到/Users/(yourUserName)/Desktop/Source Code/(yourProjectName)/Pods目录,您将在其中找到这两个文件

  • Pods-(yourProjectName).debug.xcconfig
  • Pods-(yourProjectName).release.xcconfig

在这两个文件中,您都需要删除-ObjC下的OTHER_LDFLAGS = $(inherited)标志,删除该标志的原理与已经提到的here

答案 49 :(得分:0)

就我而言,我将“构建系统”更改为“旧版”,并且有效。

您可以在菜单中访问此选项:

文件>工作区设置>构建系统

enter image description here

答案 50 :(得分:0)

我只是松开了所有吊舱并重新安装了它们。我也摆脱了一些我没有用过的豆荚。

答案 51 :(得分:0)

在 XCode 中打开您的项目

您现在将看到侧边栏聚焦在附加的图片上。enter image description here

搜索您遇到问题的特定 SDK 或任何重复文件。

您将看到您已添加任何文件两次

只需删除该文件即可解决您的问题。

注意:您必须从错误添加的位置删除该文件。

例如 enter image description here

注意:只需从 Frameworks

中删除 FBSDKCoreKit

祝你好运

答案 52 :(得分:0)

当我在标题文件中使用范围解析运算符而不是 .cpp 文件实现类方法时,发生了此错误。

PS:我在Macbook Yosemite上用C ++编程。

答案 53 :(得分:0)

我的错误是在头文件中实现了函数。 头文件中的函数定义和代码文件中的函数实现之间应该有明确的分离。

例如,我有类似的东西:

my_header.h

#ifdef my_header_h
#define my_header_h

int foo() { return 123; }

#endif // my_header_h

应该是:

#ifdef my_header_h
#define my_header_h

int foo();

#endif // my_header_h

答案 54 :(得分:0)

我尝试按照此步骤操作,现在对我有用。

  1. 打开 Xcode > Pods > 目标支持文件 > Pods-{TARGET-NAME}

    在这两个文件中找到“OTHER_LDFLAGS”并只删除“-ObjC”:

    Pods-{TARGET-NAME}.release.xcconfig & Pods-{TARGET-NAME}.debug.xcconfig

  2. 转到项目主要目标 > 构建设置 > 其他链接器标志:

    确保值中没有留下“-ObjC”

  3. 我删除了 ios 中的 build/Build 文件夹,然后再次运行-ios。现在可以使用了。