crypt function and link error "undefined reference to 'crypt'"

16,018

Solution 1

If you want to use the crypt() function, you need to link to the library that supplies it. Add -lcrypt to your compile command.

Older versions of glibc supplied a libcrypt library for this purpose, and declared the function in <unistd.h> - to compile against this support, you may also need to define either _XOPEN_SOURCE or _GNU_SOURCE in your code before including <unistd.h>.

Newer versions of glibc don't supply libcrypt - it is instead provided by a separate libxcrypt. You still link with -lcrypt, but the function is instead declared in <crypt.h>.

Solution 2

crypt() uses DES which is extremely insecure and probably older than you 12 years older than you.

I suggest you use a serious encryption algorithm, such as AES. Many libraries offer such encryption; OpenSSL (crypto.lib) is a good choice for example.

Not answering your actual question since a lot of people already did

Solution 3

You have to #define __XOPEN_SOURCE before you #include the header files.

Solution 4

You need to put the following line before your includes:

#define _XOPEN_SOURCE

Solution 5

You need to include crypt.h if you want to use crypt(). Below your other two includes, add:

#include <crypt.h>
Share:
16,018
kiruthika
Author by

kiruthika

TSE

Updated on June 20, 2022

Comments

  • kiruthika
    kiruthika almost 2 years

    I have used the crypt function in c to encrypt the given string. I have written the following code,

    #include<stdio.h>
    #include<unistd.h>
    
    int main()
    {
        printf("%s\n",crypt("passwd",1000));
    }
    

    But the above code threw an error ,"undefined reference to `crypt'". What is the problem in the above code.

    Thanks in advance.