[root@ktgd-web3 lib64]# find / -name 'libcrypt*'
/opt/ds_agent/lib/libcrypto.so.1.0.0
/usr/local/openssl-1.1.1q/lib/libcrypto.so
/usr/local/openssl-1.1.1q/lib/libcrypto.a
/usr/local/openssl-1.1.1q/lib/libcrypto.so.1.1_bak
/usr/local/openssl-1.1.1q/lib/libcrypto.so.1.1
/usr/local/openssl-1.1.1q/lib/libcrypto.so.1.1.bak
/usr/local/openssl-1.1.1q/lib/libcrypto.so.1.1.bak1
/usr/local/openssl-1.1.1q/lib/pkgconfig/libcrypto.pc
/usr/lib64/libcrypt.so.1.1.0
/usr/lib64/libcrypto.so
/usr/lib64/libcrypto.so.1.1.1k
/usr/lib64/libcryptsetup.so.12.6.0
/usr/lib64/libcrypto.so.1.1
/usr/lib64/libcrypt.so.1
/usr/lib64/libcrypt.so
/usr/lib64/libcrypto.so.1.1.bak
/usr/lib64/libcryptsetup.so.12
/usr/lib64/libcrypto.so.10
/usr/lib64/pkgconfig/libcrypto.pc
/usr/lib64/pkgconfig/libcrypt.pc
从您提供的 find 命令输出来看,您的系统中存在多个版本的 OpenSSL libcrypto 库和其他相关的库文件。这可能导致版本冲突或链接到错误版本的库文件,从而引发问题,如您之前遇到的 undefined symbol 错误。
OpenSSL 库文件:
/usr/local/openssl-1.1.1q/lib/ 目录下包含了 OpenSSL 1.1.1q 版本的库文件,包括 libcrypto.so(共享库)、libcrypto.a(静态库)和带有版本号的符号链接(如 libcrypto.so.1.1)。
/usr/lib64/ 目录下也有 libcrypto 的库文件,但看起来它们可能是系统默认安装的 OpenSSL 版本,或者是由其他软件包安装的。
版本冲突:
系统中同时存在 /usr/lib64/libcrypto.so.1.1.1k 和 /usr/local/openssl-1.1.1q/lib/libcrypto.so.1.1,这两个文件分别属于不同版本的 OpenSSL(尽管都是 1.1.x 系列,但具体的小版本号不同)。
如果您的应用程序或系统服务错误地链接到了旧版本的库文件,而该版本的库文件中缺少某些新版本的符号(如 EVP_KDF_ctrl),那么就会引发错误。
解决办法
删除多余的库文件(谨慎操作):如果确认某些版本的 OpenSSL 库文件不再需要,可以考虑删除它们,但请确保这样做不会破坏其他依赖这些库的软件包。
rm -rf /usr/local/openssl-1.1.1q/lib/libcrypto.so.1.1