user3682120
user3682120

Reputation: 1461

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

I see the error collect2: error: ld returned 1 exit status very often. For example, I was trying to build the following snippet of code:

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;
  }
}

And I got this:

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

What does it mean?

Upvotes: 145

Views: 1082714

Answers (7)

Kanishk Mewal
Kanishk Mewal

Reputation: 419

I got this error even with the basic Hello, World! program:

cout << "Hello, World!";

The problem was easy to fix: I forgot to close the previously running console window, simply minimized it and forgot. That's why I kept getting this error when I tried to run my future program. Just close it :)

Upvotes: 1

Muhammad Kashif Arif
Muhammad Kashif Arif

Reputation: 668

Try running Task Manager to determine if your program is still running.

If it is running then stop it and run it again. The [Error] ld returned 1 exit status will not come back.

Upvotes: 2

Wojtek Surowka
Wojtek Surowka

Reputation: 20993

The ld returned 1 exit status error is the consequence of previous errors. In your example, there is an earlier error—undefined reference to 'clrscr'—and this is the real one. The exit status error just signals that the linking step in the build process encountered some errors. Normally, exit status 0 means success, and exit status > 0 means errors.

When you build your program, multiple tools may be run as separate steps to create the final executable. In your case, one of those tools is ld, which first reports the error it found (clrscr reference missing), and then it returns the exit status. Since the exit status is > 0, it means an error and is reported.

In many cases, tools return the number of errors they encountered as the exit status. So if the ld tool finds two errors, its exit status would be 2.

Upvotes: 159

Raivis Rengelis
Raivis Rengelis

Reputation: 121

clrscr is not standard C function. According to the Internet, it used to be a thing in old C++Builder.

Is clrscr(); a function in C++?

Upvotes: 7

Maya
Maya

Reputation: 1

Just press Ctrl+S then do the execution part

Upvotes: -5

Pratik
Pratik

Reputation: 67

Include: #include<stdlib.h>

and use System("cls") instead of clrscr()

Upvotes: 0

fazineroso
fazineroso

Reputation: 7466

In your situation you got a reference to the missing symbols. But in some situations, ld will not provide error information.

If you want to expand the information provided by ld, just add the following parameters to your $(LDFLAGS)

-Wl,-V

Upvotes: 18

Related Questions