web-dev-qa-db-fra.com

Que signifie "collect2: error: ld a renvoyé 1 état de sortie"?

Je vois très souvent l'erreur collect2: error: ld returned 1 exit status. Par exemple, j'exécutais l'extrait de code suivant:

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

et j'ai eu ceci:

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

Qu'est-ce que ça veut dire?

42
user3682120

L'erreur ld returned 1 exit status est la conséquence des erreurs précédentes. Dans votre exemple, il y a une erreur antérieure - undefined reference to 'clrscr' - et c'est la vraie. L'erreur d'état de sortie indique simplement que l'étape de liaison dans le processus de construction a rencontré des erreurs. Normalement, exit status 0 signifie succès et exit status> 0 signifie erreurs.

Lorsque vous générez votre programme, plusieurs outils peuvent être exécutés séparément pour créer l'exécutable final. Dans votre cas, l’un de ces outils est ld, qui rapporte d’abord l’erreur trouvée (clrscr référence manquante), puis renvoie le statut de sortie. Puisque l'état de sortie est> 0, cela signifie une erreur et est signalé.

Dans de nombreux cas, les outils renvoient comme état de sortie le nombre d'erreurs rencontrées. Donc, si l’outil ld trouve deux erreurs, son état de sortie serait 2.

62
Wojtek Surowka

Dans votre cas, vous avez une référence aux symboles manquants. Mais dans certaines situations, LD ne fournira pas d'informations d'erreur.

Si vous souhaitez développer les informations fournies par ld, ajoutez simplement les paramètres suivants à votre $ (LDFLAGS)

-Wl,-V
12
fazineroso

clrscr n'est pas une fonction standard. Selon Internet, c'était une chose du vieux Borland C.
Est-ce que clrscr (); une fonction en C++?

3
Raivis Rengelis

Inclure: #include<stdlib.h>

et utilisez System("cls") au lieu de clrscr()

0
Pratik

Essayez d’exécuter le gestionnaire de tâches pour déterminer si votre programme est toujours en cours d’exécution.

S'il est en cours d'exécution, arrêtez-le et exécutez-le à nouveau. le [Erreur] ld a renvoyé 1 état de sortie ne reviendra pas

0