【问题标题】:What does "collect2: error: ld returned 1 exit status" mean?“collect2:错误:ld 返回 1 退出状态”是什么意思?
【发布时间】:2015-02-01 01:31:25
【问题描述】:

我经常看到错误collect2: error: ld returned 1 exit status。例如,我正在执行以下 sn-p 代码:

void main() {
  char i;

  printf("ENTER i");
  scanf("%c",&i);

  clrscr();

  switch(i) {
    default:
      printf("\nHi..\n");
      break;
    case 1:
      printf("\n\na");
      break;
    case 2:
      printf("\nb\n");
      break;
    case 3:
      printf("\nc");
      break;
  }
}

我得到了这个:

main.c:(.text+0x33): undefined reference to `clrscr'                       
collect2: error: ld returned 1 exit status 

什么意思?

【问题讨论】:

  • 如果您使用的是 TurboC,请尝试包含 conio.h。如果您使用的是 GCC,即使包含它也不会起作用。此外,请使用 int main() 而不是 void main() 并在末尾添加 return 0;。此外,程序只会打印 Hi.. 并退出任何内容成为输入

标签: c compiler-errors


【解决方案1】:

只需按 Ctrl+S 即可执行部分

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

即使使用基本的 HELLO WORLD 程序,我也会收到此错误:

cout << "Hello World";

问题很容易解决:我忘记关闭以前运行的控制台窗口,只是将其最小化并忘记了。这就是为什么当我尝试运行我未来的程序时不断收到此错误的原因。 关闭它:)

希望它会有所帮助,尽管您可能还有其他问题。

【讨论】:

    【解决方案3】:

    ld returned 1 exit status 错误是先前错误的结果。在您的示例中,有一个较早的错误 - undefined reference to 'clrscr' - 这是真正的错误。退出状态错误只是表示构建过程中的链接步骤遇到了一些错误。通常exit status 0 表示成功,exit status > 0 表示错误。

    当您构建程序时,可以将多个工具作为单独的步骤运行以创建最终的可执行文件。在您的情况下,其中一个工具是 ld,它首先报告它发现的错误(clrscr 参考缺失),然后返回退出状态。由于退出状态>0,表示出错,报错。

    在许多情况下,工具会返回它们遇到的错误数量作为退出状态。因此,如果 ld 工具发现两个错误,则其退出状态将为 2。

    【讨论】:

    • 嗨,Sorowka,谢谢!! “在许多情况下,工具以退出状态返回他们发现的错误数量”意味着如果有 2 个错误,它将返回 ld 返回 2 个退出状态。
    • /usr/tmp/ 没有足够的空间时,可能会导致同样的错误 (collect2: error: ld returned 1 exit status)。因为链接器无法创建临时文件。
    • ld 是 GNU 链接器,通常是 C 编译过程的最后一步。这是 ld 的在线手册页:ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html 您的错误可能是由于您提供给链接器的库中未定义 clrscr。
    【解决方案4】:

    尝试运行任务管理器以确定您的程序是否仍在运行。

    如果它正在运行,则停止它并再次运行它。 [Error] ld 返回 1 个退出状态 不会回来

    【讨论】:

    • 虽然这通常是正确的,但它与问题无关。它不会修复任何导致失败的未定义引用错误。
    【解决方案5】:

    包括:#include&lt;stdlib.h&gt;

    并使用System("cls") 而不是clrscr()

    【讨论】:

      【解决方案6】:

      在您的情况下,您得到了对缺失符号的引用。但在某些情况下,ld 不会提供错误信息。

      如果你想扩展 ld 提供的信息,只需将以下参数添加到你的 $(LDFLAGS)

      -Wl,-V
      

      【讨论】:

      • 在 OS XI 上必须使用 -Wl,-t 因为 ld 无法识别 -V 作为选项,但 -t 会导致它列出它试图链接的所有库(这有助于修复我的问题,让您了解-V 所做的事情)
      【解决方案7】:

      clrscr 不是标准 C 函数。根据网上的说法,它曾经是旧 Borland C 的东西。
      Is clrscr(); a function in C++?

      【讨论】:

        猜你喜欢
        • 2014-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        相关资源
        最近更新 更多