对“crypt”的未定义引用

时间:2011-05-13 08:48:49

标签: c cryptography linker-errors crypt

我正在使用下面的代码,我在网络的某个地方找到了,当我尝试构建它时,我收到了一个错误。编译没问题。

这是错误:

/tmp/ccCnp11F.o: In function `main':

crypt.c:(.text+0xf1): undefined reference to `crypt'

collect2: ld returned 1 exit status

这是代码:

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

 int main()
 {
   unsigned long seed[2];
   char salt[] = "$1$........";
   const char *const seedchars =
     "./0123456789ABCDEFGHIJKLMNOPQRST"
     "UVWXYZabcdefghijklmnopqrstuvwxyz";
   char *password;
   int i;

   /* Generate a (not very) random seed.
      You should do it better than this... */
   seed[0] = time(NULL);
   seed[1] = getpid() ^ (seed[0] >> 14 & 0x30000);

   /* Turn it into printable characters from `seedchars'. */
   for (i = 0; i < 8; i++)
     salt[3+i] = seedchars[(seed[i/5] >> (i%5)*6) & 0x3f];

   /* Read in the user's password and encrypt it. */
   password = crypt(getpass("Password:"), salt);

   /* Print the results. */
   puts(password);
   return 0;
 }

4 个答案:

答案 0 :(得分:16)

crypt.c:(.text+0xf1): undefined reference to 'crypt'是链接器错误。

尝试与-lcryptgcc crypt.c -lcrypt进行关联。

答案 1 :(得分:2)

编译时你要添加-lcrypt ...想象一下源文件名为crypttest.c,你会这样做:

cc -lcrypt -o crypttest crypttest.c

答案 2 :(得分:0)

您有可能忘记链接库

  gcc ..... -lcrypt

答案 3 :(得分:-1)

这可能是由于两个原因:

  1. 与地穴库相关联:使用-l<nameOfCryptLib>作为gcc的标志 示例:gcc ... -lcrypt其中crypt.h已编译到库中。
  2. 文件crypt.h不在include path中。仅当文件位于<时,您才可以在头文件周围使用>include path标记。要确保包含路径中存在crypt.h,请使用-I标记,如下所示:gcc ... -I<path to directory containing crypt.h> ...
    示例:gcc -I./crypt其中crypt.h出现在当前目录的crypt/ sub-directory中。
  3. 如果您不想使用-I标记,请将#include<crypt.h>更改为#include "crypt.h"