2017-03-16 1261 views
4

我试图在Centos 7(7.3.1611) 上编译openssl-1.1.0e,但是我成功编译了一切后没有任何警告,当我尝试任何openssl命令时出现错误加载共享库时出错:/usr/local/lib64/libssl.so.1.1

[[email protected] 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 

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

这里低于我的系统/配置一些信息

配置:

[[email protected] 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 
... 

make安装:

... 
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两个l ibraries都没有发现,尽管make install在他的工作的......

[[email protected] 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版本:

[[email protected]]$ openssl version 
OpenSSL 1.0.1e-fips 11 Feb 2013 

[[email protected]]$ which openssl 
/usr/bin/openssl 

百胜信息的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

+0

是的,现在它使用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

回答

3

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

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

sudo ldconfig 

应该一直保存路径也重新启动机器后(也为今后一段时期;-))

+0

这里是openssl github上的一个类似问题[issue#1740](https://github.com/openssl/openssl/issues/1740) – fromthestone

0

配置:

[[email protected] openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local 

I n这个情况下,你应该配置的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技巧。

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的讨论。

的./configure的Linux-x86_64的支持,ec_nistp_64_gcc_128 -Wl,-rpath =在/ usr /本地/ lib64目录\前缀=在/ usr /:

1

在这种情况下,你应该配置的OpenSSL local --openssldir =/usr/local默认情况下,OpenSSL不会添加RPATH(部分BSD除外)。您需要在您的 configure命令中手动指定它。一旦你手动指定它,事情将“只需 ”为你工作,而不需要LD_LIBRARY_PATH技巧。

我按照你的建议,但还是同样的错误,如果我不指定LD_LIBRARY_PATH它不反正工作...

[[email protected] openssl-1.1.0e]$ export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64 

[[email protected] 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) 
[[email protected] openssl-1.1.0e]$ openssl version 
OpenSSL 1.1.0e 16 Feb 2017 

它看起来像我无论如何都要使用LD_LIBRARY_PATH 不知如果是正常的或仅仅是不当行为在我的机器,我的知识不能算出它的一些原因...

+0

'libssl.so.1.1 =>/usr/local/lib/libssl.so.1.1'和'libcrypto.so.1.1 =>/usr/local/lib/libcrypto.so.1.1'似乎表明你正在安装到'/ usr/local/lib'中,而不是'在/ usr /本地/ lib64'。我认为Red Hat和像Fedora和CentOS这样的朋友使用'lib64'。我想你应该用'-Wl,-rpath =/usr/local/lib'来代替。也许你应该用'/ sbin/ldconfig -p'打印'ldd'缓存。它可能有些意想不到的事情 – jww

+0

我已经使用lib64,因为RH和朋友一起使用lib64 – fromthestone

0

试试这个:

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) 
+0

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

0

感谢莱维特,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给出了一个解决方案示例