fro*_*one 7 linker openssl compilation ldd centos7
我正在尝试在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
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是我的错误?
下面是一些关于我的系统/配置的信息
配置:
[mdm@dev openssl-1.1.0e]$ ./Configure linux-x86_64 --prefix=/usr/local --openssldir=/usr/local
Run Code Online (Sandbox Code Playgroud)
制作/制作测试:
...
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
...
Run Code Online (Sandbox Code Playgroud)
安装:
...
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
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我检查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)
Run Code Online (Sandbox Code Playgroud)
我已经通过发行版安装了一个openssl版本:
[mdm@dev]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
[mdm@dev]$ which openssl
/usr/bin/openssl
Run Code Online (Sandbox Code Playgroud)
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
...
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助或建议!
fro*_*one 14
好吧,有时当你想要爬山时你只看顶部而不检查是否有东西可以帮助你在基地...在我的情况下我解决了导出LD_LIBRARY_PATH再次编译之前.
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
Run Code Online (Sandbox Code Playgroud)
之后
sudo ldconfig
Run Code Online (Sandbox Code Playgroud)
在重新启动机器后也应保持路径保存(也适用于下次;-))
感谢莱维特、RenatoXSR
对于OpenSSL 1.1.0g, CentOS 7.2.1511, 你可以尝试这个
sudo bash -c "echo '/usr/local/lib64' >> /etc/ld.so.conf"
sudo ldconfig
Run Code Online (Sandbox Code Playgroud)
此链接解释了问题的原因
RPATH 的使用不一致。在某些系统上,ld.so 在查看 LD_LIBRARY_PATH 之前就考虑 RPATH,这使得很难覆盖,例如在测试新的 OpenSSL 版本时(!)。我们在 1.1.0 之前的版本中通过破解 LD_PRELOAD 来做到这一点,但有一些消毒剂不同意这一点,这也让生活变得困难,例如在测试新的 OpenSSL 版本时(!)
这个链接给出了一个解决方案的例子
| 归档时间: |
|
| 查看次数: |
14110 次 |
| 最近记录: |