Что означает "collect2: error: ld return 1 exit status" означает?

Я вижу ошибку collect2: error: ld returned 1 exit status очень часто. Например, я выполнял следующий фрагмент кода:

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 

Что это значит?

Ответ 1

Ошибка ld returned 1 exit status является следствием предыдущих ошибок. В вашем примере есть более ранняя ошибка - undefined reference to 'clrscr' - и это настоящая ошибка. Ошибка состояния выхода просто сигнализирует о том, что на этапе компоновки в процессе сборки возникли некоторые ошибки. Обычно exit status 0 означает успех, а exit status> 0 означает ошибки.

Когда вы создаете свою программу, несколько инструментов могут быть запущены как отдельные шаги для создания окончательного исполняемого файла. В вашем случае одним из этих инструментов является ld, который сначала сообщает об обнаруженной ошибке (отсутствует ссылка clrscr), а затем возвращает состояние выхода. Поскольку статус выхода> 0, это означает ошибку и сообщается.

Во многих случаях инструменты возвращают в качестве состояния выхода количество ошибок, с которыми они столкнулись. Поэтому, если инструмент ld обнаружит две ошибки, его состояние выхода будет равно 2.

Ответ 2

В вашей ситуации вы получили ссылку на недостающие символы. Но в некоторых ситуациях ld не будет предоставлять информацию об ошибках.

Если вы хотите расширить информацию, предоставленную ld, просто добавьте следующие параметры в ваш $ (LDFLAGS)

-Wl,-V

Ответ 4

Включить: #include<stdlib.h>

и используйте System("cls") вместо clrscr()

Ответ 5

Попробуйте запустить диспетчер задач, чтобы определить, работает ли ваша программа.

Если он работает, остановите его и запустите снова. [Ошибка] ld вернул 1 состояние выхода не вернется