undefined reference to `crypte'
Je suis en utilisant le code ci-dessous que j'ai trouvé quelque part sur le net et j'obtiens une erreur lorsque je tente 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 <stdio.h>
#include <time.h>
#include <unistd.h>
#include <crypt.h>
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 < 8; i++)
salt[3+i] = seedchars[(seed[i/5] >> (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;
}
- Double Possible de la fonction crypt et lien d'erreur "undefined reference to 'crypte'"
Vous devez vous connecter pour publier un commentaire.
crypt.c:(.text+0xf1): undefined reference to 'crypt'
est une erreur de l'éditeur de liens.Tentez de lier avec
-lcrypt
:gcc crypt.c -lcrypt
.Vous avez à ajouter -lcrypt lors de la compilation... Imaginez le fichier source est appelé crypttest.c, vous aurez à faire:
Les Chances sont que vous oublier de lier la bibliothèque
Cela pourrait être dû à deux raisons:
-l<nameOfCryptLib>
comme un drapeau pourgcc
.Exemple:
gcc ... -lcrypt
oùcrypt.h
a été compilées dans une bibliothèque.crypt.h
n'est pas dans leinclude path
. Vous pouvez utiliser<
et>
les balises d'un fichier d'en-tête uniquement lorsque le fichier est dans leinclude path
. Pour s'assurer quecrypt.h
est présent dans le chemin, utilisez la-I
drapeau, comme suit:gcc ... -I<path to directory containing crypt.h> ...
Exemple:
gcc -I./crypt
oùcrypt.h
est présent dans lecrypt/sub-directory
du répertoire courant.Si vous ne souhaitez pas utiliser le
-I
drapeau, changer la#include<crypt.h>
à#include "crypt.h"