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

Compilation 加载共享库时出错:/usr/local/lib64/libssl.so.1.1,compilation,linker,openssl,centos7,ldd,Compilation,Linker,Openssl,Centos7,Ldd,我正在尝试在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 dir

我正在尝试在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
这是一个错误还是我的错误

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

配置:

[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
[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检查两个库没有找到,尽管使安装完成了它的工作

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

感谢任何帮助或建议

有时候当你想爬山的时候,你只看山顶,而不检查是否有什么东西可以帮到你

在我的例子中,我解决了在再次编译之前导出
LD\u LIBRARY\u PATH
的问题

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

sudo ldconfig
在重新启动机器后,也应保存路径(以及下一次)

配置:

[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
[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\u LIBRARY\u PATH
技巧

enable-ec_nistp_64_gcc_128
适用于x86_64。它使Diffie Hellman跑快2到4倍。该选项有一些限制,因此使用时要小心(但在x86_64上是安全的)

另请参见OpenSSL wiki上的。讨论了RPATH和
enable-ec_nistp_64_gcc_128

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

./Configure linux-x86_64 enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/lib64 \
  --prefix=/usr/local --openssldir=/usr/local
./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_路径技巧

我已经按照你的建议做了,但是仍然有同样的错误,如果我没有指定LD_LIBRARY_路径,它无论如何都不会工作

[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了 我想知道这是正常的还是仅仅是我的机器中的错误行为,原因是我的知识无法理解…

试试这个:

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)

感谢莱维特,雷纳托克斯

对于
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构建时(!)


给出了一个解决方案示例

在将openssl从1.0.2g升级到1.1.0g后,我们遇到了相同的问题。 提供了所需的库,也提供了软链接

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

jk2K解决了我的问题

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

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

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

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

在openssl github上有一个类似的问题,
/sbin/ldconfig-p
提供了什么?它是否显示安装后的库?
/sbin/ldconfig-n/usr/local/lib64有帮助吗?是的,现在它使用lib64:
libssl.so.1.1=>/usr/local/lib64/libssl.so.1.1(0x00007f48a2c4500)libcrypto.so.1.1=>/usr/local/lib64/libcrypto.so.1.1(0x00007f48a27a1000)
@jww
libssl.so.1.1=>/usr/local/lib/libssl.so.1.1
libcrypto.so.1.1=>/usr/local/libcrypto.so.1.1
似乎表明您正在安装到
/usr/local/lib
,而不是
/usr/local/lib64
。我以为红帽和朋友们,比如Fedora和CentOS,用的是lib64。我想您应该使用
-Wl,-rpath=/usr/local/lib
。也许您也应该使用
/sbin/ldconfig-p
打印
ldd
缓存。它可能有一些意想不到的东西。我使用lib64是因为RH&friends在任何地方都使用lib64,我认为将符号链接指向systemwide/lib64可能不是一个好主意。在我看来,最好将本地编译的内容与系统管理的内容分开