Stelios Stelios - 14 days ago 5
C Question

undefined reference to `crypt'

I am using the below code that i found somewhere in the net and i am getting an error when i try to build it. The compilation is ok.

Here is the error:

/tmp/ccCnp11F.o: In function `main':

crypt.c:(.text+0xf1): undefined reference to `crypt'

collect2: ld returned 1 exit status


and here is the 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;
}

Answer

crypt.c:(.text+0xf1): undefined reference to 'crypt' is a linker error. Try linking with -lcrypt : gcc crypt.c -lcrypt.

You may also need to define _XOPEN_SOURCE or _GNU_SOURCE. Also see the man 3 crypt manual page.