“collect2: error: ld returned 1 exit status” 是什么意思?

What does "collect2: error: ld returned 1 exit status" mean?

提问人:user3682120 提问时间:12/3/2014 最后编辑:Guy Avrahamuser3682120 更新时间:7/19/2023 访问量:937174

问:

我经常看到错误collect2:error:ld返回1退出状态。例如,我正在尝试构建以下代码片段:

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

这是什么意思?

c 编译器错误 链接 链接器错误 ld

评论

0赞 Spikatrix 12/3/2014
尝试包括您是否正在使用 TurboC。如果您使用的是 GCC,即使您包含它也无法正常工作。另外,使用代替并在末尾添加 a。此外,程序将打印并退出任何输入conio.hint main()void main()return 0;Hi..
0赞 Peter Mortensen 1/22/2023
"collect2: error: ld returned 1 exit status“是 GCCld) 的签名。
0赞 Peter Mortensen 1/22/2023
一些答案声称这可能是由于程序和编译过程本身之外的东西,比如同时运行某些东西(double)。有人能弄清楚这一点吗?例如,如何复制它?
0赞 Peter Mortensen 1/22/2023
可能相关:Linux 上的退出代码 130 和 SIGINT 上的 Windows 上的退出代码 2 以及 Linux 中是否有任何标准的退出状态代码?

答:

7赞 Raivis Rengelis 12/3/2014 #1

clrscr不是标准的 C 函数。根据互联网,它曾经是旧C++ Builder中的东西。

是 clrscr();C++ 中的函数?

评论

0赞 Peter Mortensen 1/22/2023
甚至是 Turbo C++
0赞 Peter Mortensen 1/22/2023
虽然 “” 是 GCCld) 的签名。collect2: error: ld returned 1 exit status
150赞 Wojtek Surowka 12/3/2014 #2

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

生成程序时,可以运行多个工具作为单独的步骤来创建最终的可执行文件。在您的例子中,其中一个工具是 ld,它首先报告它发现的错误(缺少引用),然后返回退出状态。由于退出状态为 > 0,因此表示错误并报告。clrscr

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

评论

1赞 user3682120 12/3/2014
嗨,索罗卡,谢谢!!“在许多情况下,工具返回它们发现的错误数作为退出状态”意味着如果有 2 个错误,它将返回 ld 返回 2 个退出状态。
33赞 Kamil S Jaron 2/7/2017
当 处没有足够的空间时,也会导致相同的错误 ()。因为链接器将无法创建临时文件。collect2: error: ld returned 1 exit status/usr/tmp/
0赞 Aloha Churchill 11/24/2021
ld 是 GNU 链接器,通常是 C 编译过程的最后一步。以下是 ld 的在线手册页: ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html 您的错误可能是由于在提供给链接器的库中未定义 clrscr。
1赞 zwol 11/21/2022
我想强调的是,“对 clrscr 的未定义引用”只是“早期错误”的一个示例(基于原始问题),该错误可能会触发令人困惑的“ld 返回 1 退出状态”消息。每当您收到“ld returned 1 exit status”时,请立即查看其上方的早期错误消息,该错误消息提供了问题的更多详细信息。
17赞 fazineroso 9/22/2015 #3

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

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

-Wl,-V

评论

4赞 inspector-g 11/3/2015
在OS X上,我不得不使用as不识别为一个选项,但使它列出它试图链接的所有库(这有助于解决我的问题,并让你部分了解)-Wl,-tld-V-t-V
0赞 user3817445 10/31/2022
@inspector-克。与 GNU ld 2.38 相同
0赞 Pratik 8/12/2017 #4

包括:#include<stdlib.h>

并使用代替System("cls")clrscr()

评论

0赞 Peter Mortensen 1/22/2023
但这是特定于系统的(?)。仅适用于 Windows(?)。
2赞 Muhammad Kashif Arif 8/25/2019 #5

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

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

评论

0赞 Gerhardh 8/25/2019
虽然这通常是正确的,但它与问题无关。它不会修复导致失败的任何未定义引用错误。
0赞 Peter Mortensen 1/22/2023
阅读这个答案可能会更有意义。
1赞 Kanishk Mewal 5/20/2021 #6

即使使用基本的 Hello, World! 程序,我也会出现此错误:

cout << "Hello, World!";

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

评论

0赞 Peter Mortensen 1/22/2023
因此,即使不是,它也可能看起来像是程序的链接器错误?解释是什么?即使有另一个窗口,这些进程不是已经退出了吗?有共享文件吗?
-5赞 Maya 11/28/2021 #7

只需按 Ctrl+S,然后执行执行部分

评论

4赞 Community 11/28/2021
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
0赞 Peter Mortensen 1/18/2023
Ctrl + S 在什么情况下?Visual Studio Code?它与这个问题有什么关系?
0赞 Peter Mortensen 1/18/2023
相关新闻: 为什么我需要 50 声望才能发表评论?我能做些什么?