référence indéfinie à «crypt»

J’utilise le code ci-dessous que j’ai trouvé quelque part sur le réseau et j’obtiens une erreur lorsque j’essaie de le construire. La compilation est ok.

Voici l’erreur:

/tmp/ccCnp11F.o: In function `main': crypt.c:(.text+0xf1): undefined reference to `crypt' collect2: ld returned 1 exit status 

et voici le code:

 #include  #include  #include  #include  int main() { unsigned long seed[2]; char salt[] = "$1$........"; const char *const seedchars = "./0123456789ABCDEFGHIJKLMNOPQRST" "UVWXYZabcdefghijklmnopqrstuvwxyz"; char *password; int i; /* Generate a (not very) random seed. You should do it better than this... */ seed[0] = time(NULL); seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000); /* Turn it into printable characters from `seedchars'. */ for (i = 0; i > (i%5)*6) & 0x3f]; /* Read in the user's password and encrypt it. */ password = crypt(getpass("Password:"), salt); /* Print the results. */ puts(password); return 0; } 

    crypt.c:(.text+0xf1): undefined reference to 'crypt' est une erreur de l’éditeur de liens.

    Essayez de -lcrypt lien avec -lcrypt : gcc crypt.c -lcrypt .

    Vous devez append -lcrypt lors de la compilation … Imaginez que le fichier source s’appelle crypttest.c, vous ferez:

     cc -lcrypt -o crypttest crypttest.c 

    Il y a des chances que vous oubliez de relier la bibliothèque

      gcc ..... -lcrypt 

    Cela pourrait être dû à deux raisons:

    1. Liaison avec la bibliothèque -l : utilisez -l comme indicateur de gcc .
      Exemple: gcc ... -lcryptcrypt.h a été compilé dans une bibliothèque.
    2. Le fichier crypt.h n’est pas dans le include path . Vous pouvez utiliser les balises < et > autour d'un fichier d'en-tête uniquement lorsque le fichier se trouve dans le include path . Pour vous assurer que crypt.h est présent dans le chemin d'inclusion, utilisez l'indicateur -I , comme gcc ... -I ... : gcc ... -I ...
      Exemple: gcc -I./cryptcrypt.h est présent dans le crypt/ sub-directory cours.

    Si vous ne souhaitez pas utiliser l'indicateur -I , remplacez le #include par #include "crypt.h"