crypt function and link error “undefined reference to 'crypt'”
-
23-09-2019 - |
Question
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.
Solution
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>
.
OTHER TIPS
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
You need to include crypt.h if you want to use crypt()
. Below your other two includes, add:
#include <crypt.h>
You need to put the following line before your includes:
#define _XOPEN_SOURCE
You have to #define __XOPEN_SOURCE
before you #include
the header files.
The crypt
function is non-standard, but is supplied as an extension by the GNU C library on Linux. It's defined in <crypt.h>