web-dev-qa-db-ja.com

「collect2:エラー:ldが1つの終了ステータスを返しました」とはどういう意味ですか?

エラー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 

どういう意味ですか?

42
user3682120

ld returned 1 exit statusエラーは、以前のエラーの結果です。あなたの例では、以前のエラー-undefined reference to 'clrscr'-があり、これが実際のエラーです。終了ステータスエラーは、ビルドプロセスのリンク手順でエラーが発生したことを通知するだけです。通常、exit status 0は成功を意味し、exit status> 0はエラーを意味します。

プログラムをビルドすると、複数のツールが個別のステップとして実行され、最終的な実行可能ファイルが作成されます。あなたの場合、それらのツールの1つはldであり、最初に見つかったエラー(clrscr参照が欠落している)を報告してから、終了ステータスを返します。終了ステータスは> 0であるため、エラーを意味し、報告されます。

多くの場合、ツールは終了ステータスとして、発生したエラーの数を返します。 ldツールが2つのエラーを検出した場合、終了ステータスは2になります。

62
Wojtek Surowka

あなたの状況では、欠落しているシンボルへの参照を得ました。しかし、状況によっては、ldはエラー情報を提供しません。

Ldが提供する情報を拡張する場合は、次のパラメーターを$(LDFLAGS)に追加するだけです

-Wl,-V
12
fazineroso

clrscrは標準C関数ではありません。インターネットによると、それはかつてのBorland Cのものでした。
clrscr(); C++の関数?

3
Raivis Rengelis

含める:#include<stdlib.h>

System("cls")の代わりにclrscr()を使用します

0
Pratik

タスクマネージャーを実行して、プログラムがまだ実行されているかどうかを確認してください。

実行中の場合は、停止して再度実行します。 [エラー] ldが1つの終了ステータスを返しましたは戻りません