Apple Mach-O Linker Error: 1 duplicate symbol for architechture
Apple Mach-O Linker Error: 1 duplicate symbol for architechture
这是我在 Xcode 中 运行 我的项目时遇到的错误:
重复符号 _coinsTotal 在:
/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: 架构 i386 的 1 个重复符号
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
您在 header 文件中将三个 int 值声明为全局变量。在你的代码中任何包含这个 header 的地方,你都会成为 defining/redefining 他们。
您可以在 header 文件中将它们声明为外部:
/* 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
但我更愿意将它们创建为单例 class 的成员,然后在需要设置或读取值的地方包含接口 header 文件。
形成你的代码,重复符号的原因是你在 "ViewController.h":
中声明了三个全局变量
int coinsTotal;
int pointsLeft;
int dailyTwenty;
解决这个问题,在.h文件中声明为"extern",然后在.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...
就我而言,导入 .m
而不是 .h
会导致重复符号。
这是我在 Xcode 中 运行 我的项目时遇到的错误:
重复符号 _coinsTotal 在:
/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: 架构 i386 的 1 个重复符号 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
您在 header 文件中将三个 int 值声明为全局变量。在你的代码中任何包含这个 header 的地方,你都会成为 defining/redefining 他们。
您可以在 header 文件中将它们声明为外部:
/* 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
但我更愿意将它们创建为单例 class 的成员,然后在需要设置或读取值的地方包含接口 header 文件。
形成你的代码,重复符号的原因是你在 "ViewController.h":
中声明了三个全局变量int coinsTotal;
int pointsLeft;
int dailyTwenty;
解决这个问题,在.h文件中声明为"extern",然后在.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...
就我而言,导入 .m
而不是 .h
会导致重复符号。