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

时间:2017-03-16 07:46:56

标签: compilation linker openssl centos7 ldd

我正在尝试在Centos 7上编译openssl-1.1.0e(7.3.1611) 但是在我成功编译了所有内容之后没有任何警告,我在尝试任何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

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

下面是关于我的系统/配置的一些信息

配置:

[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
...

感谢任何帮助或建议!

8 个答案:

答案 0 :(得分:9)

好的,有时当你想要爬山时,你会看到顶部而不检查是否有什么东西可以帮助你在基地...... 在我的情况下,我解决了在再次编译之前导出LD_LIBRARY_PATH。

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

之后

sudo ldconfig

应该在重新启动机器后保持路径(也适用于下次;-))

答案 1 :(得分: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 我想知道这是不正常还是只是我机器中的不当行为,原因是我的知识无法弄清楚......

答案 2 :(得分:1)

试试这个:

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)

答案 3 :(得分:0)

  

配置:

[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 wiki上的Compilation and Installation。讨论了RPATH,并讨论了enable-ec_nistp_64_gcc_128

答案 4 :(得分:0)

感谢levitte,RenatoXSR

对于OpenSSL 1.1.0gCentOS 7.2.1511,您可以尝试此操作

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

this link解释问题的原因

  

RPATH的使用不一致。在某些系统上,ld.so甚至在查看LD_LIBRARY_PATH之前会考虑RPATH,这使得很难覆盖,例如在测试新的OpenSSL构建(!)时。我们在1.1.0之前的版本中通过黑客攻击LD_PRELOAD这样做了,但有一些消毒剂不同意这一点,这也使生活变得艰难,例如在测试新的OpenSSL版本时(!)

this link给出了解决方案示例

答案 5 :(得分:0)

jk2K解决了我的问题

对于OpenSSL 1.1.0g,CentOS 7.2.1511,您可以尝试以下操作:

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

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

sudo ldconfig 

为我们工作。它重建了ldconfig缓存。