C 加密函数和链接错误“;未定义对'的引用;地穴'&引用;

C 加密函数和链接错误“;未定义对'的引用;地穴'&引用;,c,linker-errors,crypt,C,Linker Errors,Crypt,我在c中使用了crypt函数来加密给定的字符串。 我已经编写了以下代码 #include<stdio.h> #include<unistd.h> int main() { printf("%s\n",crypt("passwd",1000)); } #包括 #包括 int main() { printf(“%s\n”,crypt(“passwd”,1000)); } 但是上面的代码抛出了一个错误,“对'crypt'的未定义引用”。 上面代码中的问题是什么 提

我在c中使用了crypt函数来加密给定的字符串。 我已经编写了以下代码

#include<stdio.h>
#include<unistd.h>

int main()
{
    printf("%s\n",crypt("passwd",1000));
}
#包括
#包括
int main()
{
printf(“%s\n”,crypt(“passwd”,1000));
}
但是上面的代码抛出了一个错误,“对'crypt'的未定义引用”。 上面代码中的问题是什么


提前感谢。

如果要使用
crypt()
,您需要包括crypt.h。在您的其他两个附件下面,添加:

#include <crypt.h>
#包括

crypt函数是非标准函数,但由Linux上的GNU C库作为扩展提供。它是在

中定义的。您需要在include之前添加以下行:

#define _XOPEN_SOURCE
crypt()

我建议您使用严格的加密算法,如AES。许多图书馆提供这种加密;例如,这是一个很好的选择


没有回答您的实际问题,因为很多人已经回答了

如果您想使用
crypt()
函数,您需要链接到提供该函数的库。将
-lcrypt
添加到compile命令中

glibc的旧版本为此提供了一个
libcrypt
库,并在
中声明了函数-要根据此支持进行编译,在包含
之前,您可能还需要在代码中定义
\u XOPEN\u SOURCE
\u GNU\u SOURCE


较新版本的glibc不提供
libcrypt
——而是由单独的
libxcrypt
提供。您仍然链接到
-lcrypt
,但是函数在

中声明,您必须在
包含头文件之前定义源代码。
没有
加密而不是加密?@Joha:no,否则它将被称为
hash
,不是吗?我已经在我的代码中添加了这一行。之后它也抛出了同样的错误。“几乎所有Linux发行版使用的GNU C库都提供了一个crypt函数的实现,它支持DES、MD5和基于SHA的哈希算法”(至少根据Wikipedia)