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

问题描述 投票:0回答:12

我正在尝试在 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 信息 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
...

感谢任何帮助或建议!

compilation linker openssl centos7 ldd
12个回答
43
投票

有时当你想爬山时,你只看山顶而没有检查是否有什么可以帮助你在基地......

在我的例子中,我解决了在再次编译之前导出

LD_LIBRARY_PATH
的问题。

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

及之后

sudo ldconfig

重启机器后也应该保存路径(以及下一次)


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 做到了这一点,但是有一些消毒剂不同意这一点,这也让生活变得艰难,例如在测试新的 OpenSSL 构建时(!)

这个链接给出了一个解决方案的例子


5
投票

我知道这已经晚了,但就我而言,我的服务器上没有

libssl.so.1.1
。 有一个建议这里安装
openssl11-libs
但不是
openssl11
因为安装它可能会产生问题。

确认您的服务器上没有

libssl.so.1.1
,可能是通过尝试
locate libssl.so.1.1
.

如果您的服务器上没有

sudo yum install -y  openssl11-libs
库,只需执行
libssl.so.1.1

对我有用。


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)

1
投票

配置:

[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 除外)。您需要在配置命令中手动指定它。一旦你手动指定它,事情就会为你“正常工作”,而不需要

LD_LIBRARY_PATH
技巧。

enable-ec_nistp_64_gcc_128
适用于x86_64。它使 Diffie-Hellman 的运行速度提高了 2 到 4 倍。该选项有一些限制,所以使用它时要小心(但你在 x86_64 上是安全的)。

另请参阅 OpenSSL wiki 上的编译和安装。有RPATHs的讨论,还有

enable-ec_nistp_64_gcc_128
的讨论。


1
投票

在这种情况下,您应该配置 OpenSSL:

./配置linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \ --prefix=/usr/local --openssldir=/usr/local 默认情况下,OpenSSL 不添加 RPATH(某些 BSD 除外)。您需要在您的 配置命令。一旦你手动指定它,事情就会“只是 工作”,而不需要 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 我想知道这是正常的还是只是我机器上的不当行为,出于某些我的知识无法弄清楚的原因......


0
投票

jk2K 解决了我的问题

对于OpenSSL 1.1.0g, CentOS 7.2.1511,你可以试试这个:

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

0
投票

对于 CentOS 7+,将以下内容添加到

/etc/environment

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

0
投票

我建议你使用来自

EPEL repo
的半官方 OpenSSL 1.1 包 openssl11 而不是从头开始编译它:

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

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

0
投票

这可能会成功

sudo apt-get install libssl1.1

0
投票

这对我有用:

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

-1
投票

我们在将 openssl 从 1.0.2g 升级到 1.1.0g 后遇到了同样的问题。 存在所需的库,并且存在软链接。

sudo ldconfig 

为我们工作。它重建了

ldconfig
缓存。

© www.soinside.com 2019 - 2024. All rights reserved.