加载共享库时出错:/usr/local/lib64/libssl.so.1.1

26

我正在尝试在Centos 7 (7.3.1611)上编译openssl-1.1.0e,但是尽管一切都成功编译而没有任何警告,但在尝试任何openssl命令时我会遇到错误。

[mdm@dev openssl-1.1.0e]$ openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

这是一个bug还是我的错误?

以下是我的系统/配置信息:

配置:

[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local

构建/进行测试:

...
All tests successful.
Files=91, Tests=486, 44 wallclock secs ( 0.47 usr  0.08 sys + 27.72 cusr 13.41 csys = 41.68 CPU)
Result: PASS
...

安装:

...
install libcrypto.a -> /usr/local/lib64/libcrypto.a
install libssl.a -> /usr/local/lib64/libssl.a
install libcrypto.so.1.1 -> /usr/local/lib64/libcrypto.so.1.1
link /usr/local/lib64/libcrypto.so -> /usr/local/lib64/libcrypto.so.1.1
install libssl.so.1.1 -> /usr/local/lib64/libssl.so.1.1
link /usr/local/lib64/libssl.so -> /usr/local/lib64/libssl.so.1.1
...

但是如果我使用ldd检查,尽管Make install做了它的工作,但有两个库没有被找到...

[mdm@dev openssl-1.1.0e]$ ldd /usr/local/bin/openssl
linux-vdso.so.1 =>  (0x00007fffcfe75000)
/lib/$LIB/liblsp.so => /lib/lib64/liblsp.so (0x00007fa5cd77a000)
libssl.so.1.1 => not found
libcrypto.so.1.1 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x00007fa5cd55d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fa5cd341000)
libc.so.6 => /lib64/libc.so.6 (0x00007fa5ccf7f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa5cd981000)

我已经安装了一个openssl版本的发行版:

[mdm@dev]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

[mdm@dev]$ which openssl
/usr/bin/openssl

yum info openssl:

...
Installed Packages
Name        : openssl
Arch        : x86_64
Epoch       : 1
Version     : 1.0.1e
Release     : 60.el7_3.1
Size        : 1.5 M
Repo        : installed
From repo   : updates
...

感激任何帮助或建议!


1
“/sbin/ldconfig -p”有什么作用?它是否显示安装后的库?“/sbin/ldconfig -n /usr/local/lib64”是否有帮助? - jww
是的,现在它正在使用 lib64: libssl.so.1.1 => /usr/local/lib64/libssl.so.1.1 (0x00007f48a2c45000) libcrypto.so.1.1 => /usr/local/lib64/libcrypto.so.1.1 (0x00007f48a27a1000) @jww - fromthestone
13个回答

46

有时候当你想要攀登一座山时,你只会看到山顶而不检查基础是否有什么可以帮助你的东西......

在我的情况下,我只需在重新编译之前导出LD_LIBRARY_PATH即可解决问题。

export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64

之后

sudo ldconfig

这样可以在重启机器后保留路径(并且也适用于下一次)。


这是一个与 OpenSSL GitHub 上的类似问题 issue #1740 - fromthestone

6

我知道现在已经有点晚了,但在我的情况下,我的服务器上没有 libssl.so.1.1 库。

在这里有一条建议(链接),建议安装 openssl11-libs 而不是 openssl11,因为安装后可能会出现问题。

通过尝试命令 locate libssl.so.1.1 来确认您的服务器上是否存在 libssl.so.1.1

如果您的服务器上没有 libssl.so.1.1 库,只需运行 sudo yum install -y openssl11-libs 即可。

这对我有用。


6
感谢Levitte和RenatoXSR,对于OpenSSL 1.1.0g和CentOS 7.2.1511,您可以尝试以下操作。
sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
sudo ldconfig

这个链接解释了问题的原因。

RPATH 的使用是不一致的。在某些系统上,ld.so 在查找 LD_LIBRARY_PATH 之前就已经考虑了 RPATH,这使得覆盖变得困难,例如测试新的 OpenSSL 构建(!)。我们在 1.1.0 版本之前通过修改 LD_PRELOAD 来实现,但是有一些 Sanitizers 不支持,这也使得测试新的 OpenSSL 构建(!)变得困难。

这个链接提供了一个解决方案示例。


3

试试这个:

ldd libssl.so   ->  libcrypto.so.1.1 => not found
sudo ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f17d46c7000)

我认为将符号链接指向系统范围的/lib64可能不是一个好主意。在我看来,最好将本地编译的内容与系统管理的内容分开。 - fromthestone

2

这对我有用...

  1. 在您的Ubuntu系统上打开终端。

  2. 执行以下命令以添加focal-security存储库:

    echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list

此命令将一个新的存储库条目添加到 /etc/apt/sources.list.d/focal-security.list文件中,其中包含 Ubuntu focal版本所需的安全更新。

  1. 接下来,运行以下命令以更新软件包列表:

    sudo apt update

此命令从所有配置的存储库检索最新的软件包信息, 包括新添加的focal-security存储库。

  1. 最后,通过执行以下命令安装libssl1.1软件包:
    sudo apt install libssl1.1
此命令安装 libssl1.1 包,提供 OpenSSL 加密库版本 1.1。此命令安装 libssl1.1 包,提供 OpenSSL 加密库版本 1.1。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
1
刚刚在尝试安装SQL。对我来说很顺利。谢谢! - undefined

1

Configure:

[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
在这种情况下,您应该使用以下配置来配置 OpenSSL:

./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \
  --prefix=/usr/local --openssldir=/usr/local

OpenSSL默认不会添加RPATH(除了一些BSD系统)。您需要在configure命令中手动指定它。一旦手动指定,就可以轻松使用,无需使用LD_LIBRARY_PATH技巧。 enable-ec_nistp_64_gcc_128适用于x86_64。它使Diffie-Hellman运行速度提高2倍到4倍。该选项有一些限制,因此在使用时要小心(但在x86_64上是安全的)。
另请参见OpenSSL维基上的编译和安装。其中讨论了RPATH和enable-ec_nistp_64_gcc_128

1
在这种情况下,您应该使用以下配置来配置OpenSSL: ./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \ --prefix=/usr/local --openssldir=/usr/local OpenSSL默认不添加RPATHs(除了某些BSD)。您需要在configure命令中手动指定它。一旦您手动指定它,就可以正常工作,而不需要LD_LIBRARY_PATH的技巧。 我按照您的建议操作,但如果我不指定LD_LIBRARY_PATH,则仍然出现相同的错误...
[mdm@dev openssl-1.1.0e]$ export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64

[mdm@dev openssl-1.1.0e]$ ldd /usr/local/bin/openssl 
    linux-vdso.so.1 =>  (0x00007ffc87aef000)
    /lib/$LIB/liblsp.so => /lib/lib64/liblsp.so (0x00007f57511fa000)
    libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f5750f8c000)
    libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f5750ae8000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f57508cb000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f57506ae000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f57502ed000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5751401000)
[mdm@dev openssl-1.1.0e]$ openssl version
OpenSSL 1.1.0e  16 Feb 2017

看起来我必须使用LD_LIBRARY_PATH,不知道这是正常情况还是因为一些我无法理解的原因而在我的机器上出现了问题...


libssl.so.1.1 => /usr/local/lib/libssl.so.1.1libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 看起来表明您正在安装到 /usr/local/lib,而不是 /usr/local/lib64。我认为 Red Hat 和 Fedora、CentOS 等类似的发行版使用 lib64。我想你应该使用 -Wl,-rpath=/usr/local/lib。也许你应该用 /sbin/ldconfig -p 命令打印 ldd 缓存,这可能会有一些意外情况。 - jww
我使用了lib64,因为RH及其相关软件在各个地方都使用lib64。 - fromthestone

0

jk2K解决了我的问题

对于OpenSSL 1.1.0g,CentOS 7.2.1511,您可以尝试以下方法:

sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
sudo ldconfig

0

我建议您使用半官方的OpenSSL 1.1软件包openssl11,从EPEL repo下载,而不是从头开始编译:

# if you don't have EPEL repo yet...
yum install -y epel-release

# ...and then:
yum install -y openssl11

0

对于 CentOS 7+,请将以下内容添加到 /etc/environment 文件中:

LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接