我知道 - 有很多像这样的问题 - 但找不到解决方案......
尝试在 CentOS 6 上安装 FTP4ALL 3.012。
/configure
正常执行,但make
- 返回错误:
f4adp_user.o: In function `f4adp_usr_pwd':
f4adp_user.c:(.text+0xfa0): undefined reference to `crypt'
f4adp_user.o: In function `f4adp_usr_chg':
f4adp_user.c:(.text+0x340e): undefined reference to `crypt'
f4adp_user.o: In function `f4adp_usr_adq':
f4adp_user.c:(.text+0x37a7): undefined reference to `crypt'
serverd.o: In function `user_request_login_permission':
serverd.c:(.text+0x2a9a): undefined reference to `crypt'
collect2: ld returned 1 exit status
Makefile仅包含:
$ cat Makefile | tail -n 15
all:
@cd src ; make
strip:
@cd src ; make strip
clean:
@cd lib ; make clean
@cd src ; make clean
@cd cfg ; make clean
@rm -f Makefile src/common/tweak.h src/common/Makefile src/Makefile src/ftpa/Makefile src/ftpd/Makefile src/ftps/Makefile
install:
cp -f bin/* /usr/local/bin
我该如何解决?
答案 0 :(得分:1)
您需要将-lcrypt添加到链接行,以便链接器在crypt中搜索crypt函数。
在普通的Unix工具链中,事情如下:
源代码(compiler) - >汇编代码(assembler) - > .o文件 - > (linker) - >可执行文件。
链接器是工具链的最后一部分,负责将所有函数组合成可执行文件。在Makefile中的某个地方,很可能是src子目录中的Makefile,会有一行告诉链接器在哪里可以找到所有.o文件和任何依赖库。那是你的链接线,它需要有-lcrypt才能找到crypt函数。
答案 1 :(得分:0)
仅关于FTP4ALL - 解决方案是:
$ vim ../../ftp/ftp4all/configure
其中ftp4all
是目录,它是在:
$ tar xfp ftpd-3.012.tar.gz`
查找行:
echo $ac_n "| want DES encryption (y/n) ? $ac_c"
编辑:
else
DES=""
LIB=${LIB}
fi
要:
else
DES=""
LIB=${LIB}" -lcrypt"
fi
此外,在此之后 - 编译时出现了另一个错误:
common.c:52: error: conflicting types for ‘setenv’
/usr/include/stdlib.h:585: note: previous declaration of ‘setenv’ was here
解决方案:
$ vim ./src/ftps/common.c
评论/*
和*/
行:
#ifndef HAVE_SETENV
/*
void setenv(char* var, char* val, int new)
{ char str[256];
sprintf(str,"%s=%s",var,val);
putenv(str);
}
*/
#endif /* HAVE_SETENV */
现在 - 它有效。
P.S。请注意:
不再维护FTP4ALL。本网站仅供参考 目的。请访问后续项目OpenFTPD。
希望 - 没有其他人会尝试安装它: - )