pysunred 发表于 2023-3-31 14:22:47

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

本帖最后由 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.ostr2key.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

isdkz 发表于 2023-3-31 14:24:19

你发的就出现了警告,没有出现错误的地方呀

pysunred 发表于 2023-3-31 14:37:22

isdkz 发表于 2023-3-31 14:24
你发的就出现了警告,没有出现错误的地方呀

隐式声明与内建函数‘exit’不兼容 [-Wbuiltin-declaration-mismatch]
325 |         exit(0);
但好像没有编译成功呀

isdkz 发表于 2023-3-31 14:40:44

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

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

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

pysunred 发表于 2023-3-31 14:40:50

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

isdkz 发表于 2023-3-31 14:24
你发的就出现了警告,没有出现错误的地方呀

# make
gcc -c -o smbencrypt/SMBPasswdGen.osmbencrypt/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: *** 错误 1
# make install
gcc -c -o smbencrypt/SMBPasswdGen.osmbencrypt/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: *** 错误 1

pysunred 发表于 2023-3-31 14:46:44

isdkz 发表于 2023-3-31 14:40
编译这些大项目有警告很正常,几乎不可能零警告的

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

接下来安装不了changepassword,提示找不到这个文件

isdkz 发表于 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"的下一行,添加以下代码:

#include <stdlib.h>

3、保存并关闭文件。

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

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

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

#include <stdlib.h>

3、保存并关闭文件。

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

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

sudo pdbedit -a -u username

其中username是您要修改密码的Samba用户。这将提示您输入新密码。请注意,这需要您具有root权限。

pysunred 发表于 2023-3-31 14:56:38

isdkz 发表于 2023-3-31 14:52
你看一下 gpt 的回答:

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

GPT只是听说了,没想到这么牛,哈哈
你怎么安装的GPT?需要付费的吗?

isdkz 发表于 2023-3-31 14:58:34

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

我是用的官网的 ai.com

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

pysunred 发表于 2023-3-31 15:13:52

isdkz 发表于 2023-3-31 14:58
我是用的官网的 ai.com

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

编译 changepassword,不会提示找不到lides了,
但这个错还存在
collect2: 错误:ld 返回 1
make: *** 错误 1

isdkz 发表于 2023-3-31 15:15:18

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


这里没有具体的报错信息也看不出来呀{:10_277:}
页: [1]
查看完整版本: centos9编译加载libdes时报错,如何解决!!!