【问题标题】:Duplicate symbols for architecture when using global constants [duplicate]使用全局常量时架构的重复符号[重复]
【发布时间】:2015-08-10 19:49:29
【问题描述】:

我创建了下面的头文件,它定义了我将在整个 iOS 应用程序中使用的常量列表。

//
//  constants.h
//

#ifndef constants_h
#define constants_h

 NSString* const BaseURL = @"https://.../";
 NSString* const personalFeed = @"https://...";
 NSString* const professionalFeed = @"https://...";

 NSString* const profiles = @"https://...";


 NSString* const profileImages = @"https://...";
 NSString* const profileCollage = @"https://...";

 NSString* const login = @"https://...";
 NSString* const signup = @"https://...";
#endif

在我需要这些的所有控制器中。我已经添加了他们的头文件,如下图:

#include "constants.h"

但是,当我构建应用程序时,我得到了错误:

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

我怎样才能避免这个错误?

【问题讨论】:

标签: ios objective-c


【解决方案1】:

问题发生是因为您在头文件中定义常量,而不是声明它们。您需要将定义移动到 .m 文件中,并将它们替换为标题中的 extern 声明:

//
//  constants.h
//

#ifndef constants_h
#define constants_h

extern NSString* const BaseURL;
extern  NSString* const personalFeed;
...
//
//  constants.m
//
#import "constants.h"

NSString* const BaseURL = @"https://.../";
NSString* const personalFeed = @"https://...";

【讨论】:

    【解决方案2】:

    不要在头文件中定义变量。在标头中将它们声明为extern,然后在实现文件中定义一次。

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2015-08-01
      • 1970-01-01
      • 2016-06-03
      • 2015-01-22
      • 2014-12-05
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多