我正在使用下面的代码,我在网络的某个地方找到了,当我尝试构建它时,我收到了一个错误。编译没问题。
这是错误:
/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;
}
答案 0 :(得分:16)
crypt.c:(.text+0xf1): undefined reference to 'crypt'
是链接器错误。
尝试与-lcrypt
:gcc crypt.c -lcrypt
进行关联。
答案 1 :(得分:2)
编译时你要添加-lcrypt ...想象一下源文件名为crypttest.c,你会这样做:
cc -lcrypt -o crypttest crypttest.c
答案 2 :(得分:0)
您有可能忘记链接库
gcc ..... -lcrypt
答案 3 :(得分:-1)
这可能是由于两个原因:
-l<nameOfCryptLib>
作为gcc
的标志
示例:gcc ... -lcrypt
其中crypt.h
已编译到库中。 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
中。 如果您不想使用-I
标记,请将#include<crypt.h>
更改为#include "crypt.h"