crypt function and link error "undefined reference to 'crypt'"
I have used the crypt function in c to encrypt the given string. I have written the following code,
#include<stdio.h>
#include<unist开发者_开发技巧d.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.
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>
.
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 have to #define __XOPEN_SOURCE
before you #include
the header files.
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
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>
精彩评论