web-dev-qa-db-ja.com

共有ライブラリのロード中にエラーが発生しました:/usr/local/lib64/libssl.so.1.1

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

テストの作成/作成:

...
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が機能したにもかかわらず、2つのライブラリが見つかりません...

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

どんな助けや提案にも感謝します!

7
fromthestone

わかりました。山に登りたいとき、ベースで何かが役立つかどうかを確認せずに頂上だけを探しているときがあります...私の場合、LD_LIBRARY_PATHをエクスポートしてから、再度コンパイルしました。

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

以降

Sudo ldconfig

マシンを再起動した後もパスを保存し続ける必要があります(次回も同様です;-))

15
fromthestone

これを試して:

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)
1

レビット、RenatoXSRのおかげで

ために OpenSSL 1.1.0gCentOS 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ビルド(!)

このリンク はソリューションの例を示しました

1
jk2K

この場合、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トリックを必要とせずに、「うまくいく」だけです。

私はあなたの忠告に従いましたが、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を使用する必要があるようですが、これが正常か、私の知識が理解できないいくつかの理由でマシンの動作に問題があるのでしょうか...

1
fromthestone

構成、設定:

[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に関する議論があります。

0
jww

jk2Kは私の問題を解決しました

OpenSSL 1.1.0g、CentOS 7.2.1511の場合、これを試すことができます。

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