【问题标题】:Linker command failed with exit code 1 error链接器命令失败,退出代码 1 错误
【发布时间】:2013-10-28 03:14:54
【问题描述】:

在尝试编译和运行我的项目时,我遇到了上述错误。这是更详细的外观:

duplicate symbol _timeTick in:
/Users/zstephen/Library/Developer/Xcode/DerivedData/MyStore_2-ejjgywkgxdulkogcohzbzojgqpzp/Build/Intermediates/MyStore 2.build/Debug-iphonesimulator/MyStore.build/Objects-normal/i386/TimeController.o
/Users/zstephen/Library/Developer/Xcode/DerivedData/MyStore_2-ejjgywkgxdulkogcohzbzojgqpzp/Build/Intermediates/MyStore 2.build/Debug-iphonesimulator/MyStore.build/Objects-normal/i386/DeviceDetailViewController.o
ld: 1 duplicate symbol for architecture i386

clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我该如何解决这个问题?提前致谢!

更新:这是使用 timeTick 的 3 个文件:

.h:

#import <UIKit/UIKit.h>

int timeTick = 0;

@interface TimeController : UIViewController{
IBOutlet UILabel *labelTime;
}
- (IBAction)startTimer:(id)sender;


@end

.m:

@implementation TimeController


NSTimer *timer;   

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    labelTime.text = @"0";
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

    - (IBAction)startTimer:(id)sender {
    [timer invalidate];
    timer= [NSTimer scheduledTimerWithTimeInterval:60.0 target:(self) selector:             (@selector(tick)) userInfo:(nil) repeats:(YES)];
}

-(void)tick{
    timeTick++;
    NSString *timeString = [[NSString alloc] initWithFormat:@"%d", timeTick];
    labelTime.text = timeString;



}


@end

最后,有一个单独的文件将 timeTick 保存和加载到 Core Data 中。

.m:

NSNumber *timetickNumber = [NSNumber numberWithInt:timeTick];
[newDevice setValue:timetickNumber forKey:@"name"];

【问题讨论】:

  • 该错误表明您在两种方法中都将相同的符号 _timeTick 声明为全局符号。不要那样做。显示easm文件中_timeTick的声明代码。
  • @Zaph 我已删除所有对 _timeTick 的引用。错误仍然发生。我正在使用一个名为 timeTick 的 int。这有影响吗?
  • 可能。贴出使用timeTick的代码,我们可以为您提供更多信息。
  • @user1118321 我已经上传了我的 timeTick 代码。这会导致错误吗?

标签: xcode compiler-errors


【解决方案1】:

发生的情况是#imports 和.h 文件的每个文件现在都有自己的变量timeTick。您需要做的是在标头中将其设为外部,然后在.m 文件中定义它。所以你.h 应该是这样的:

extern int timeTick;

那么你的.m 应该在文件顶部有这个:

int timeTick = 0;

然后任何需要访问它的文件都会#import ".h" 并查看定义。由于它是外部的,因此他们不会创建自己的timeTick,而是会在链接时查找一个,他们会在.m 文件中找到它。

【讨论】:

  • 非常感谢!你太棒了!
猜你喜欢
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 2017-04-12
  • 2018-06-12
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
相关资源
最近更新 更多