【问题标题】:linker command failed with exit code 1 - Xcode链接器命令失败,退出代码为 1 - Xcode
【发布时间】:2015-06-02 13:54:39
【问题描述】:

我不断收到此错误,我不知道为什么。我已经在其他应用程序中实现了这个方法,但由于某种原因它不适用于这个......

我有以下几点:

ViewController.h:

    NSInteger HighScore;

ViewController.m:

 - (void)viewDidLoad {
      ...
      //load highscores
      HighScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"];
      HighscoreLabel.text = [NSString stringWithFormat:@"%li", (long)HighScore];
 }

游戏.m:

 #import "ViewController.h"
 ...
 //set/save new highscore
 if(Score > HighScore){
    [[NSUserDefaults standardUserDefaults] setInteger:Score forKey:@"HighScoreSaved"];
 }

并且它不断返回一个失败的构建,并带有一个链接器错误,说“重复符号”。

我很困惑。我什至尝试添加一个全局标头并将其导入到 ViewController 和 Game 中,但仍然出现链接器错误?:

全球.h:

 #ifndef _Global_h
 #define _Global_h

 NSInteger HighScore;

 #endif

ViewController.m:

 #import "Global.h"

 - (void)viewDidLoad {
      ...
      //load highscores
      HighScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"];
      HighscoreLabel.text = [NSString stringWithFormat:@"%li", (long)HighScore];
 }

游戏.m:

 #import "Global.h"
 ...
 //set/save new highscore
 if(Score > HighScore){
    [[NSUserDefaults standardUserDefaults] setInteger:Score forKey:@"HighScoreSaved"];
 }

Xcode 会有问题吗?我已经尝试过典型的“清洁构建”等...... 还是我在做一些非常愚蠢的事情?谢谢。

根据 molbdnilo 的回答更新

虽然这不是我之前实现的方式,但它现在正在使用这个实现:

ViewController.h:

 extern NSInteger HighScore;

ViewController.m:

 //load highscore
 HighScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"HighScoreSaved"];
 HighscoreLabel.text = [NSString stringWithFormat:@"%li", (long) HighScore];

游戏.h:

 NSInteger HighScore; //exactly as declared in ViewController.h

游戏.m:

 //if higher score, overwrite
 if (Score > HighScore){
     [[NSUserDefaults standardUserDefaults] setInteger:Score forKey:@"HighScoreSaved"];
 } 

【问题讨论】:

  • 可能这个NSInteger HighScore;是你的问题。
  • 您介意解释一下吗?

标签: c++ ios xcode linker


【解决方案1】:

每次您在某处包含/导入文件时,您的 HighScore 变量都会得到一个定义。
(关于血淋淋的细节,请查阅“翻译单元”的概念。)

如果你真的非常想使用一个全局变量,你需要在标题中声明它“extern”:

extern NSInteger HighScore;

并在一个源文件中定义它:

NSInteger HighScore;

【讨论】:

  • 这很有效,所以感谢您的发帖。这不是我之前实现它的方式,这让我很困惑,因为它在我的最后一个应用程序中工作,在我的脑海中没有理由不应该工作。这次 xCode 中必须有一个设置与之冲突。我将根据您的回答更新我的代码,向大家展示我是如何实现它的。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 2018-06-12
  • 2019-08-01
  • 1970-01-01
相关资源
最近更新 更多