undefined reference to `crypt'

孤人 提交于 2019-12-19 05:54:20

问题


I am using the below code that i found somewhere in the net and i am getting an error when i try to build it. The compilation is ok.

Here is the error:

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

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

collect2: ld returned 1 exit status

and here is the code:

#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;
 }

回答1:


crypt.c:(.text+0xf1): undefined reference to 'crypt' is a linker error.

Try linking with -lcrypt : gcc crypt.c -lcrypt.




回答2:


You've to add -lcrypt when compiling... Imagine the source file is called crypttest.c, you'll do:

cc -lcrypt -o crypttest crypttest.c



回答3:


Chances are you forget to link the library

  gcc ..... -lcrypt



回答4:


This could be due to two reasons:

  1. Linking with the crypt library: use -l<nameOfCryptLib> as a flag to gcc.
    Example: gcc ... -lcrypt where crypt.h has been compiled into a library.
  2. The file crypt.h is not in the include path. You can use < and > tags around a header file only when the file is in the include path. To ensure that crypt.h is present in the include path, use the -I flag, like so: gcc ... -I<path to directory containing crypt.h> ...
    Example: gcc -I./crypt where crypt.h is present in the crypt/ sub-directory of the current directory.

If you do not want to use the -I flag, change the #include<crypt.h> to #include "crypt.h"



来源:https://stackoverflow.com/questions/5989444/undefined-reference-to-crypt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!