2017-03-16 229 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給出了一個解決方案示例