crypt函数和链接错误“未定义引用'crypt'”

时间:2010-04-02 06:56:54

标签: c linker-errors crypt

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

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

int main()
{
    printf("%s\n",crypt("passwd",1000));
}

但是上面的代码引发了一个错误,“未定义引用`crypt'”。 上面的代码有什么问题。

提前致谢。

6 个答案:

答案 0 :(得分:10)

如果要使用crypt()功能,则需要链接到提供它的库。将-lcrypt添加到编译命令中。

较旧版本的glibc为此目的提供了一个libcrypt库,并在<unistd.h>中声明了该函数 - 要针对此支持进行编译,您可能还需要定义_XOPEN_SOURCE或{在包含_GNU_SOURCE之前的代码中{1}}。

较新版本的glibc不提供<unistd.h> - 而是由单独的libcrypt提供。您仍然与libxcrypt相关联,但该功能在-lcrypt中声明。

答案 1 :(得分:7)

crypt()使用的是非常不安全的DES,而可能比你年长比你大12岁。

我建议您使用严格的加密算法,例如AES。许多图书馆提供此类加密;例如,OpenSSL (crypto.lib)是一个不错的选择。

没有回答你的实际问题,因为很多人已经做过

答案 2 :(得分:1)

如果要使用crypt(),则需要包含crypt.h。在其他两个包括下方,添加:

#include <crypt.h>

答案 3 :(得分:1)

您需要在包含之前添加以下行:

#define _XOPEN_SOURCE

答案 4 :(得分:1)

#define __XOPEN_SOURCE头文件之前,您必须#include

答案 5 :(得分:0)

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

中定义