Apple Mach-O链接器错误:1个用于architechture的重复符号

时间:2015-07-16 02:00:37

标签: objective-c xcode linker-errors mach-o

这是我在Xcode中运行项目时遇到的错误:

重复符号_coinsTotal in:

/Library/Developer/Xcode/DerivedData/AppName-fqlzuwivxudvndbinqsoudxkdzrg/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/ViewController.o

/Library/Developer/Xcode/DerivedData/AppName-fqlzuwivxudvndbinqsoudxkdzrg/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/AppDelegate.o

ld:1个体系结构i386的重复符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

发生错误是因为我在AppDelegate.m中导入了我的ViewController.h但我需要这样做,所以我可以在我的奖励视频播放后添加硬币总数。我已将我的ViewController.h添加到其他应用程序中的AppDelegate.m中,没有错误。

有任何想法或建议吗?谢谢!

以下是我在顶部的ViewController.h文件中的代码:

#import <UIKit/UIKit.h>

#import <Chartboost/Chartboost.h>



int coinsTotal;
int pointsLeft;
int dailyTwenty;


@interface ViewController : UIViewController <UIActionSheetDelegate>

以下是我的AppDelegate.m文件的代码:

#import "AppDelegate.h"

#import "ViewController.h"

#import <CommonCrypto/CommonDigest.h>
#import <AdSupport/AdSupport.h>
#import <Chartboost/Chartboost.h>
#import <Chartboost/CBNewsfeed.h>

@interface AppDelegate ()<ChartboostDelegate>

@end

@implementation AppDelegate

3 个答案:

答案 0 :(得分:4)

您将头文件中的三个int值声明为全局变量。无论你在代码中包含这个标题,你都要定义/重新定义它们。

您可以在头文件中将它们声明为extern:

/* in ViewController.h */
extern int coinsTotal;
extern int pointsLeft;
extern int dailyTwenty;

然后在@implementation代码之外的AppDelegate.m顶部声明它们一次。

/* in AppDelegate.m */
int coinsTotal = 0;
int pointsLeft = 0;
int dailyTwenty = 0;
...

@implementation AppDelegate
...
@end

但我更喜欢将它们创建为单例类的成员,然后在需要设置或读取值的地方包含接口头文件。

答案 1 :(得分:1)

形成代码,重复符号的原因是你在&#34; ViewController.h&#34;中声明了三个全局变量:

int coinsTotal;
int pointsLeft;
int dailyTwenty;

解决这个问题,将它们声明为&#34; extern&#34;在.h文件中,然后在.m文件中声明它们:

/* in ViewController.h */
extern int coinsTotal;
extern int pointsLeft;
extern int dailyTwenty;

/*in ViewController.m*/
int coinsTotal = 0;
int pointsLeft = 0;
int dailyTwenty = 0;

基本上,重复符号有三个原因:

  • 包含.m文件而不是.h
  • 在.h文件中声明全局变量或符号,并将其包含在其他地方
  • 导入周期。例如A导入B,B导入C,C导入A ...

答案 2 :(得分:-1)

就我而言,导入.m而不是.h会导致重复的符号。