解决`OPENSSL_1.0.0' not found 报错问题

admin 2019-5-25 7803

系统: CentOS 7.5.1804
故障1: 执行某程序报错"libcrypto.so.1.0.0: cannot open shared object file: No such file or directory"
故障2: 执行某程序报错"libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found "
处理过程:

# 在故障1中,可以看出是缺少libcrypto.so.1.0.0库文件,先查找系统中是否存在该库文件
ldconfig -v | grep libcrypto.so.1.0.0
# 发现并没有输出,再查找
ldconfig -v | grep libcrypto.so
libcrypto.so.10 -> libcrypto.so.1.0.2k
# 发现有一个libcrypto.so.1.0.2k文件,尝试使用这个文件做一个libcrypto.so.1.0.0的链接文件
cd /usr/lib64/ && ln -s libcrypto.so.1.0.2k libcrypto.so.1.0.0
# 再次执行时,出现故障2的错误,于是来查看一下该动态库是否存在OPENSSL_1.0.0的常量
strings /usr/lib64/libcrypto.so.1.0.0 | grep OPENSSL_1
OPENSSL_1.0.1
OPENSSL_1.0.1_EC
OPENSSL_1.0.2# 从上面输出可以看出,并没有“OPENSSL_1.0.0”的版本信息
# 由于libcrypto.so.1.0.0动态库是由openssl提供的,出现故障2的错误,就需要编译一下openssl
# 先查看当前系统中的版本
openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

# 选择和它相同版本或者更高版本,当前选择1.0.2p
wget https://www.openssl.org/source/openssl-1.0.2p.tar.gz

# 解压
tar zxvf openssl-1.0.2p.tar.gzcd openssl-1.0.2p

# 创建一个链接脚本文件,添加OPENSSL_1.0.0的信息。
cat > openssl.ld << EOF
OPENSSL_1.0.0 {
    global:
    *;
};
OPENSSL_1.0.1 {
    global:
    *;
};
OPENSSL_1.0.1_EC {
    global:
    *;
};
OPENSSL_1.0.2 {
    global:
    *;
};
EOF

# 使用config的时候需要附加上刚才创建的链接脚本文件,该文件可使编译后生成的动态库文件中包含该版本信息
./config --prefix=/usr/local/ --openssldir=/usr/local/openssl shared -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions

# 编译
make -j4

# 编译结束后,会生成一个libcrypto.so.1.0.0动态库文件,查看它是否包含“OPENSSL_1.0.0”信息
strings libcrypto.so.1.0.0 | grep OPENSSL_1
OPENSSL_1.0.0
OPENSSL_1.0.1
OPENSSL_1.0.1_EC
OPENSSL_1.0.2
OPENSSL_1.0.1
OPENSSL_1.0.1_EC
OPENSSL_1.0.0
OPENSSL_1.0.2

# 已经包含该版本,可以单独将libcrypto.so.1.0.0文件放置到系统库目录下了。
cp libcrypto.so.1.0.0 /usr/lib64/

# 如果只是需要该so库的话,就不一定非要执行"make install"操作了


最新回复 (0)
返回