libssl.so.1.1: cannot open shared object file
使用 Ubuntu 22.04 时,有时候会遇到如下错误
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
这是因为Ubuntu 22.04 默认使用的是 openssl3.0
,但是大多为 Ubuntu 生成的可执行文件依赖 openssl 1.1
安装Openssl 1.1
我们可以采取源码安装的方式解决这个问题
下载源码包并解压
首先确定已经安装下载工具
apt install -y wget
随后执行下载操作
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
对下载的文件解压并进入到文件夹中
tar xvf openssl-1.1.1q.tar.gz && cd openssl-1.1.1q
安装 GCC、Perl、Make
首先确保 Ubuntu 22.04 已经安装 GCC
Perl
Make
工具
如果你不知道这几样是什么,那么请执行安装命令
sudo apt install -y perl gcc make
执行 config 配置
在成功安装上述工具后执行 config
命令
./config
如果一切正常应出现下方提示:
Operating system: x86_64-whatever-linux2
Configuring OpenSSL version 1.1.1q (0x1010111fL) for linux-x86_64
Using os-specific seed configuration
Creating configdata.pm
Creating Makefile
**********************************************************************
*** ***
*** OpenSSL has been successfully configured ***
*** ***
*** If you encounter a problem while building, please open an ***
*** issue on GitHub <https://github.com/openssl/openssl/issues> ***
*** and include the output from the following command: ***
*** ***
*** perl configdata.pm --dump ***
*** ***
*** (If you are new to OpenSSL, you might want to consult the ***
*** 'Troubleshooting' section in the INSTALL file first) ***
*** ***
**********************************************************************
编译
随后执行 make
make
等待编译成功后将出现类似如下提示:
${LDCMD:-gcc} -pthread -m64 -Wa,--noexecstack -Wall -O3 -L. \
-o test/x509_dup_cert_test test/x509_dup_cert_test.o \
test/libtestutil.a -lcrypto -ldl -pthread
rm -f test/x509_internal_test
${LDCMD:-gcc} -pthread -m64 -Wa,--noexecstack -Wall -O3 -L. \
-o test/x509_internal_test test/x509_internal_test.o \
test/libtestutil.a libcrypto.a -ldl -pthread
rm -f test/x509_time_test
${LDCMD:-gcc} -pthread -m64 -Wa,--noexecstack -Wall -O3 -L. \
-o test/x509_time_test test/x509_time_test.o \
test/libtestutil.a -lcrypto -ldl -pthread
rm -f test/x509aux
${LDCMD:-gcc} -pthread -m64 -Wa,--noexecstack -Wall -O3 -L. \
-o test/x509aux test/x509aux.o \
test/libtestutil.a -lcrypto -ldl -pthread
make[1]: Leaving directory '/root/openssl-1.1.1q'
安装
这时 openssl1.1
就已经编译好了,我们还需要将动态库放入 /usr/local/lib
中,执行 make install
即可
sudo make install
执行成功后将出现类似以下提示:
/usr/local/share/doc/openssl/html/man7/crypto.html
/usr/local/share/doc/openssl/html/man7/ct.html
/usr/local/share/doc/openssl/html/man7/des_modes.html
/usr/local/share/doc/openssl/html/man7/Ed25519.html
/usr/local/share/doc/openssl/html/man7/Ed448.html -> /usr/local/share/doc/openssl/html/man7/Ed25519.html
/usr/local/share/doc/openssl/html/man7/evp.html
/usr/local/share/doc/openssl/html/man7/ossl_store-file.html
/usr/local/share/doc/openssl/html/man7/ossl_store.html
/usr/local/share/doc/openssl/html/man7/passphrase-encoding.html
/usr/local/share/doc/openssl/html/man7/proxy-certificates.html
/usr/local/share/doc/openssl/html/man7/RAND.html
/usr/local/share/doc/openssl/html/man7/RAND_DRBG.html
/usr/local/share/doc/openssl/html/man7/RSA-PSS.html
/usr/local/share/doc/openssl/html/man7/scrypt.html
/usr/local/share/doc/openssl/html/man7/SM2.html
/usr/local/share/doc/openssl/html/man7/ssl.html
/usr/local/share/doc/openssl/html/man7/X25519.html
/usr/local/share/doc/openssl/html/man7/X448.html -> /usr/local/share/doc/openssl/html/man7/X25519.html
/usr/local/share/doc/openssl/html/man7/x509.html
设置环境变量并生效
有些可执行文件读取的动态链接库的路径不同,这里最好设置一下动态链接库的环境变量
sudo echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/lib" >> /etc/profile
执行 source /etc/profile
使其在当前客户端生效
source /etc/profile
这样就成功解决了这个问题