鱼C论坛

 找回密码
 立即注册
查看: 582|回复: 10

centos9编译加载libdes时报错,如何解决!!!

[复制链接]
发表于 2023-3-31 14:22:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 pysunred 于 2023-3-31 14:39 编辑

最近在整一台服务器,
在服务器安装了centos9,使用samba实现了文件共享,
现在想安装changerpassword实现用户自己修改密码,
但是,
在安装changerpassword时,要先安装libdes
可是
安装libdes时报错,报函数兼容问题
由于不熟悉这个系统,
不知道如何解决这个报错问题,
请高手指点,
如果有其它修改密码的方法,(服务器没有加域,samba的改密码不方便)
也可指点下,感谢!!!
万分感谢,谢谢!!!

]# cd des/
# make
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o cbc_cksm.o cbc_cksm.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o cbc_enc.o cbc_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o ecb_enc.o ecb_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o des_enc.o des_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o fcrypt_b.o fcrypt_b.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o fcrypt.o fcrypt.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o set_key.o set_key.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o pcbc_enc.o pcbc_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o xcbc_enc.o xcbc_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o qud_cksm.o qud_cksm.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o cbc3_enc.o cbc3_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o cfb64ede.o cfb64ede.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o cfb64enc.o cfb64enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o cfb_enc.o cfb_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o ecb3_enc.o ecb3_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o enc_read.o enc_read.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o enc_writ.o enc_writ.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o ofb64ede.o ofb64ede.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o ofb64enc.o ofb64enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o ofb_enc.o ofb_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o rand_key.o rand_key.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o read_pwd.o read_pwd.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o read2pwd.o read2pwd.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o rpc_enc.o rpc_enc.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o str2key.o str2key.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o supp.o supp.c
/bin/rm -f libdes.a
ar cr libdes.a cbc_cksm.o cbc_enc.o ecb_enc.o des_enc.o fcrypt_b.o               fcrypt.o set_key.o pcbc_enc.o xcbc_enc.o qud_cksm.o cbc3_enc.o cfb64ede.o cfb64enc.o cfb_enc.o ecb3_enc.o enc_read.o enc_writ.o ofb64ede.o ofb64enc.o ofb_enc.o rand_key.o read_pwd.o read2pwd.o rpc_enc.o  str2key.o supp.o
if test -s /bin/ranlib; then /bin/ranlib libdes.a; \
else if test -s /usr/bin/ranlib; then /usr/bin/ranlib libdes.a; \
else exit 0; fi; fi
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o rpw.o rpw.c
rpw.c: 在函数‘main’中:
rpw.c:91:17: 警告:隐式声明函数‘exit’ [-Wimplicit-function-declaration]
   91 |                 exit(1);
      |                 ^~~~
rpw.c:61:1: 附注:include ‘<stdlib.h>’ or provide a declaration of ‘exit’
   60 | #include "des.h"
  +++ |+#include <stdlib.h>
   61 |
rpw.c:91:17: 警告:隐式声明与内建函数‘exit’不兼容 [-Wbuiltin-declaration-mismatch]
   91 |                 exit(1);
      |                 ^~~~
rpw.c:91:17: 附注:include ‘<stdlib.h>’ or provide a declaration of ‘exit’
rpw.c:96:17: 警告:隐式声明与内建函数‘exit’不兼容 [-Wbuiltin-declaration-mismatch]
   96 |                 exit(0);
      |                 ^~~~
rpw.c:96:17: 附注:include ‘<stdlib.h>’ or provide a declaration of ‘exit’
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer -o rpw rpw.o libdes.a
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o des.o des.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer -o des des.o libdes.a
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o destest.o destest.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer -o destest destest.o libdes.a
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o speed.o speed.c
speed.c: 在函数‘main’中:
speed.c:325:9: 警告:隐式声明函数‘exit’ [-Wimplicit-function-declaration]
  325 |         exit(0);
      |         ^~~~
speed.c:101:1: 附注:include ‘<stdlib.h>’ or provide a declaration of ‘exit’
  100 | #include "des.h"
  +++ |+#include <stdlib.h>
  101 |
speed.c:325:9: 警告:隐式声明与内建函数‘exit’不兼容 [-Wbuiltin-declaration-mismatch]
  325 |         exit(0);
      |         ^~~~
speed.c:325:9: 附注:include ‘<stdlib.h>’ or provide a declaration of ‘exit’
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer -o speed speed.o libdes.a
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer   -c -o des_opts.o des_opts.c
gcc -DRAND -DTERMIO      -O3 -fomit-frame-pointer -o des_opts des_opts.o libdes.a
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-31 14:24:19 | 显示全部楼层
你发的就出现了警告,没有出现错误的地方呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 14:37:22 | 显示全部楼层
isdkz 发表于 2023-3-31 14:24
你发的就出现了警告,没有出现错误的地方呀

隐式声明与内建函数‘exit’不兼容 [-Wbuiltin-declaration-mismatch]
  325 |         exit(0);
但好像没有编译成功呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 14:40:44 | 显示全部楼层
pysunred 发表于 2023-3-31 14:37
隐式声明与内建函数‘exit’不兼容 [-Wbuiltin-declaration-mismatch]
  325 |         exit(0);
但好 ...

编译这些大项目有警告很正常,几乎不可能零警告的

你是怎么判定他没有编译成功的?你有 make install 了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 14:40:50 | 显示全部楼层
本帖最后由 pysunred 于 2023-3-31 14:42 编辑
isdkz 发表于 2023-3-31 14:24
你发的就出现了警告,没有出现错误的地方呀


# make
gcc -c -o smbencrypt/SMBPasswdGen.o  smbencrypt/SMBPasswdGen.c
gcc -c -o smbencrypt/encrypt.o       smbencrypt/encrypt.c
gcc -c -o smbencrypt/md4.o           smbencrypt/md4.c
gcc -c -o smbencrypt/smbencrypt.o    smbencrypt/smbencrypt.c
gcc changepassword.c -o changepassword.cgi smbencrypt/SMBPasswdGen.o smbencrypt/md4.o smbencrypt/smbencrypt.o smbencrypt/encrypt.o -lcrypt -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DHAVE_LIBCRYPT=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_STDIO_H=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_PWD_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SIGNAL_H=1 -DHAVE_SHADOW_H=1 -DHAVE_TIME_H=1  -DEnglish -DSMBPASSWD=\"/etc/samba/smbpasswd\" -DSQUIDPASSWD=\"no\" -DLOGO=\"opentech.jpg\" -L./smbencrypt -ldes
changepassword.c:48:1: 警告:返回类型默认为‘int’ [-Wimplicit-int]
   48 | main(int argc, char *argv[]) {
      | ^~~~
changepassword.c: 在函数‘main’中:
changepassword.c:188:12: 警告:隐式声明函数‘crypt’ [-Wimplicit-function-declaration]
  188 | if (strcmp(crypt(form_pw,sd_list->sp_pwdp),sd_list->sp_pwdp))
      |            ^~~~~
changepassword.c:188:12: 警告:传递‘strcmp’的第 1 个参数时将整数赋给指针,未作类型转换 [-Wint-conversion]
  188 | if (strcmp(crypt(form_pw,sd_list->sp_pwdp),sd_list->sp_pwdp))
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |            |
      |            int
In file included from defs.h:7,
                 from changepassword.c:46:
/usr/include/string.h:140:32: 附注:需要类型‘const char *’,但实参的类型为‘int’
  140 | extern int strcmp (const char *__s1, const char *__s2)
      |                    ~~~~~~~~~~~~^~~~
changepassword.c:220:6: 警告:隐式声明函数‘mkstemp’ [-Wimplicit-function-declaration]
  220 | if ((mkstemp(TMPFILE))<0) {
      |      ^~~~~~~
changepassword.c:226:17: 警告:assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  226 | sd_list->sp_pwdp=crypt(form_newpw1,"$1$");
      |                 ^
changepassword.c:244:1: 警告:隐式声明函数‘chmod’ [-Wimplicit-function-declaration]
  244 | chmod(TMPFILE,0600);
      | ^~~~~
changepassword.c: 在函数‘changesmbpass’中:
changepassword.c:476:25: 警告:隐式声明函数‘smbencrypt’ [-Wimplicit-function-declaration]
  476 |                         smbencrypt(form_newpw1);
      |                         ^~~~~~~~~~
changepassword.c:514:1: 警告:隐式声明函数‘flockfile’ [-Wimplicit-function-declaration]
  514 | flockfile(smb_file);
      | ^~~~~~~~~
changepassword.c:521:1: 警告:隐式声明函数‘funlockfile’ [-Wimplicit-function-declaration]
  521 | funlockfile(smb_file);
      | ^~~~~~~~~~~
changepassword.c: 在函数‘changesquidpass’中:
changepassword.c:600:34: 警告:assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  600 |                         squidpass=crypt(form_newpw1,salt);
      |                                  ^
changepassword.c: 在函数‘htoi’中:
changepassword.c:691:8: 警告:隐式声明函数‘isupper’ [-Wimplicit-function-declaration]
  691 |    if (isupper(c))
      |        ^~~~~~~
changepassword.c:47:1: 附注:include ‘<ctype.h>’ or provide a declaration of ‘isupper’
   46 | #include "defs.h"
  +++ |+#include <ctype.h>
   47 |
changepassword.c:692:11: 警告:隐式声明函数‘tolower’ [-Wimplicit-function-declaration]
  692 |       c = tolower(c);
      |           ^~~~~~~
changepassword.c:692:11: 附注:include ‘<ctype.h>’ or provide a declaration of ‘tolower’
/usr/bin/ld: smbencrypt/encrypt.o:(.bss+0x0): multiple definition of `smbencrypted'; /tmp/ccci3HkK.o:(.bss+0xa0): first defined here
/usr/bin/ld: 当搜索用于 ./smbencrypt/libdes.a 时跳过不兼容的 -ldes
/usr/bin/ld: 找不到 -ldes
collect2: 错误:ld 返回 1
make: *** [Makefile:30:changepassword.cgi] 错误 1
# make install
gcc -c -o smbencrypt/SMBPasswdGen.o  smbencrypt/SMBPasswdGen.c
gcc -c -o smbencrypt/encrypt.o       smbencrypt/encrypt.c
gcc -c -o smbencrypt/md4.o           smbencrypt/md4.c
gcc -c -o smbencrypt/smbencrypt.o    smbencrypt/smbencrypt.c
gcc changepassword.c -o changepassword.cgi smbencrypt/SMBPasswdGen.o smbencrypt/md4.o smbencrypt/smbencrypt.o smbencrypt/encrypt.o -lcrypt -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DHAVE_LIBCRYPT=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_STDIO_H=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_PWD_H=1 -DHAVE_ERRNO_H=1 -DHAVE_SIGNAL_H=1 -DHAVE_SHADOW_H=1 -DHAVE_TIME_H=1  -DEnglish -DSMBPASSWD=\"/etc/samba/smbpasswd\" -DSQUIDPASSWD=\"no\" -DLOGO=\"opentech.jpg\" -L./smbencrypt -ldes
changepassword.c:48:1: 警告:返回类型默认为‘int’ [-Wimplicit-int]
   48 | main(int argc, char *argv[]) {
      | ^~~~
changepassword.c: 在函数‘main’中:
changepassword.c:188:12: 警告:隐式声明函数‘crypt’ [-Wimplicit-function-declaration]
  188 | if (strcmp(crypt(form_pw,sd_list->sp_pwdp),sd_list->sp_pwdp))
      |            ^~~~~
changepassword.c:188:12: 警告:传递‘strcmp’的第 1 个参数时将整数赋给指针,未作类型转换 [-Wint-conversion]
  188 | if (strcmp(crypt(form_pw,sd_list->sp_pwdp),sd_list->sp_pwdp))
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |            |
      |            int
In file included from defs.h:7,
                 from changepassword.c:46:
/usr/include/string.h:140:32: 附注:需要类型‘const char *’,但实参的类型为‘int’
  140 | extern int strcmp (const char *__s1, const char *__s2)
      |                    ~~~~~~~~~~~~^~~~
changepassword.c:220:6: 警告:隐式声明函数‘mkstemp’ [-Wimplicit-function-declaration]
  220 | if ((mkstemp(TMPFILE))<0) {
      |      ^~~~~~~
changepassword.c:226:17: 警告:assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  226 | sd_list->sp_pwdp=crypt(form_newpw1,"$1$");
      |                 ^
changepassword.c:244:1: 警告:隐式声明函数‘chmod’ [-Wimplicit-function-declaration]
  244 | chmod(TMPFILE,0600);
      | ^~~~~
changepassword.c: 在函数‘changesmbpass’中:
changepassword.c:476:25: 警告:隐式声明函数‘smbencrypt’ [-Wimplicit-function-declaration]
  476 |                         smbencrypt(form_newpw1);
      |                         ^~~~~~~~~~
changepassword.c:514:1: 警告:隐式声明函数‘flockfile’ [-Wimplicit-function-declaration]
  514 | flockfile(smb_file);
      | ^~~~~~~~~
changepassword.c:521:1: 警告:隐式声明函数‘funlockfile’ [-Wimplicit-function-declaration]
  521 | funlockfile(smb_file);
      | ^~~~~~~~~~~
changepassword.c: 在函数‘changesquidpass’中:
changepassword.c:600:34: 警告:assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
  600 |                         squidpass=crypt(form_newpw1,salt);
      |                                  ^
changepassword.c: 在函数‘htoi’中:
changepassword.c:691:8: 警告:隐式声明函数‘isupper’ [-Wimplicit-function-declaration]
  691 |    if (isupper(c))
      |        ^~~~~~~
changepassword.c:47:1: 附注:include ‘<ctype.h>’ or provide a declaration of ‘isupper’
   46 | #include "defs.h"
  +++ |+#include <ctype.h>
   47 |
changepassword.c:692:11: 警告:隐式声明函数‘tolower’ [-Wimplicit-function-declaration]
  692 |       c = tolower(c);
      |           ^~~~~~~
changepassword.c:692:11: 附注:include ‘<ctype.h>’ or provide a declaration of ‘tolower’
/usr/bin/ld: smbencrypt/encrypt.o:(.bss+0x0): multiple definition of `smbencrypted'; /tmp/ccvL2MpQ.o:(.bss+0xa0): first defined here
/usr/bin/ld: 当搜索用于 ./smbencrypt/libdes.a 时跳过不兼容的 -ldes
/usr/bin/ld: 找不到 -ldes
collect2: 错误:ld 返回 1
make: *** [Makefile:30:changepassword.cgi] 错误 1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 14:46:44 | 显示全部楼层
isdkz 发表于 2023-3-31 14:40
编译这些大项目有警告很正常,几乎不可能零警告的

你是怎么判定他没有编译成功的?你有 make install  ...

接下来安装不了changepassword,提示找不到这个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 14:52:56 | 显示全部楼层
pysunred 发表于 2023-3-31 14:46
接下来安装不了changepassword,提示找不到这个文件

你看一下 gpt 的回答:

从报错信息来看,主要是因为exit函数没有在源代码中声明导致的。exit函数是定义在<stdlib.h>头文件中的,因此需要在源代码中包含这个头文件。

请尝试以下操作,修复源代码中的错误:

1、使用文本编辑器打开rpw.c文件。

2、在包含#include "des.h"的下一行,添加以下代码:

  1. #include <stdlib.h>
复制代码


3、保存并关闭文件。

接下来,对speed.c文件执行相同的操作:

1、使用文本编辑器打开speed.c文件。

2、在包含#include "des.h"的下一行,添加以下代码:

  1. #include <stdlib.h>
复制代码


3、保存并关闭文件。

完成这些操作后,回到终端并重新运行make命令。这应该能解决编译过程中遇到的问题。

另外,关于您提到的“其他修改密码的方法”,您可以尝试使用pdbedit工具。这是一个Samba密码数据库编辑工具,可以用于管理Samba用户账户。要使用pdbedit修改用户密码,请运行以下命令:

  1. sudo pdbedit -a -u username
复制代码


其中username是您要修改密码的Samba用户。这将提示您输入新密码。请注意,这需要您具有root权限。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 14:56:38 | 显示全部楼层
isdkz 发表于 2023-3-31 14:52
你看一下 gpt 的回答:

从报错信息来看,主要是因为exit函数没有在源代码中声明导致的。exit函数是定 ...

GPT只是听说了,没想到这么牛,哈哈
你怎么安装的GPT?需要付费的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 14:58:34 | 显示全部楼层
pysunred 发表于 2023-3-31 14:56
GPT只是听说了,没想到这么牛,哈哈
你怎么安装的GPT?需要付费的吗?

我是用的官网的 ai.com

可以免费使用,不过免费的体验不咋地
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-31 15:13:52 | 显示全部楼层
isdkz 发表于 2023-3-31 14:58
我是用的官网的 ai.com

可以免费使用,不过免费的体验不咋地

编译 changepassword,不会提示找不到lides了,
但这个错还存在
collect2: 错误:ld 返回 1
make: *** [Makefile:30:changepassword.cgi] 错误 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-31 15:15:18 | 显示全部楼层
pysunred 发表于 2023-3-31 15:13
编译 changepassword,不会提示找不到lides了,
但这个错还存在
collect2: 错误:ld 返回 1

这里没有具体的报错信息也看不出来呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表