OpenSUSEでCをコンパイルするときのlibssh2およびlibcurlライブラリのSSLに関する「未定義の参照」

OpenSUSEでCをコンパイルするときのlibssh2およびlibcurlライブラリのSSLに関する「未定義の参照」

Cソフトウェアをコンパイルしようとしましたが、SSLライブラリに「未定義の参照」が表示されるようです。そこに言及されたライブラリがあり、実際に再コンパイルしました:zlib + openssl + openssh。エラーがまだ存在します。

オペレーティングシステムopenSUSE Leap 42.1。

gcc(SUSE Linux) 4.8.5

GNUメイク4.0

コンパイル中にエラーが発生しました(make -j4):

/usr/lib64/libssh2.so.1: undefined reference to `EVP_aes_128_ctr'
/usr/lib64/libssh2.so.1: undefined reference to `EVP_aes_256_ctr'
/usr/local/lib64/libcurl.so: undefined reference to `SSL_CTX_set_srp_username' 
/usr/lib64/libssh2.so.1: undefined reference to `EVP_aes_192_ctr' 
/usr/local/lib64/libcurl.so: undefined reference to `SSL_CTX_set_srp_password' 
/usr/local/lib64/libcurl.so: undefined reference to `SSL_CTX_set_next_proto_select_cb' 
/usr/local/lib64/libcurl.so: undefined reference to `ERR_remove_thread_state' 
collect2: error: ld returned 1 exit status

ライブラリの依存関係情報:

ldd /usr/lib64/libssh2.so.1

linux-vdso.so.1 (0x00007fffcf745000)
libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007fde9b18f000)
libz.so.1 => /usr/local/lib/libz.so.1 (0x00007fde9af75000)
libc.so.6 => /lib64/libc.so.6 (0x00007fde9abcd000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fde9a9c9000)
/lib64/ld-linux-x86-64.so.2 (0x0000556ace037000)

ldd /usr/local/lib64/libcurl.so

linux-vdso.so.1 (0x00007ffecd319000)
libssh2.so.1 => /usr/lib64/libssh2.so.1 (0x00007f3e4760e000)
libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f3e473a6000)
libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f3e46fb1000)
liblber-2.4.so.2 => /usr/lib64/liblber-2.4.so.2 (0x00007f3e46da2000)
libldap-2.4.so.2 => /usr/lib64/libldap-2.4.so.2 (0x00007f3e46b56000)
libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f3e4693c000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3e46594000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3e46390000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3e46178000)
libsasl2.so.3 => /usr/lib64/libsasl2.so.3 (0x00007f3e45f5b000)
/lib64/ld-linux-x86-64.so.2 (0x000055e1d1abf000)

欠落している依存関係がありますか?ありがとうございます。

答え1

エラーメッセージはほぼ最後に表示されます。

ldd次のパス名は表示されません。リンク新しいショー。パス名のみが表示されます。走る既存の計画。名前へのシンボリックリンクを含むOpenSSL用の開発パッケージが見つからない可能性があります。終わり「.so」(出力に表示されるバージョンが指定されたライブラリ名を指すldd)を使用します。

libopenssl-devel-1.0.1k-11.87.1.x86_64たとえば、私のOpenSuSE 13には、以下を含むシンボリックリンクがあります。

/usr/lib64/libcrypto.so
/usr/lib64/libssl.so

さらに、ldd次のように表示されます。

    linux-vdso.so.1 (0x00007ffc0d09f000)
    libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f63ae4f3000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f63ae2dd000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f63adf2f000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f63add2b000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f63aeb0a000)

これはfromのようにlibz組み込まれておらず、システムにインストールされます(このライブラリはすでにシステム領域に依存しているため、コンパイルした理由は明確ではありません)。/usr/local/liblibz1-1.2.8-3.1.2.x86_64libssh2.so

ldd見つからないライブラリは通常表示されます。libz.soたとえば、置き換えるファイルと同じモデルでない場合は、交換に問題がある可能性があります。このfileユーティリティを使用して比較できます。また、リンクで使用されている実際のライブラリに関する詳細情報を取得するには、verboseオプションを使用できます-v(表示された依存関係と同じ名前のライブラリを使用しようとする場合ldd)。

関連情報