3

libcrypto.so に依存する共有ライブラリ (「libX.so」) に対して自分のコードをリンクしようとしています。libcrypto.so.1.0.0 をインストールしましたが、特に libcrypto.so.0.9.8 が必要なようです。1.0.0 とリンクさせる方法はありますか? 私のシステム (archlinux) に 0.9.8 をインストールするには、他のパッケージを壊す必要があります。

/usr/bin/ld: warning: libcrypto.so.0.9.8, needed by /usr/local/lib/libX.so, not found (try using -rpath or -rpath-link)
/usr/local/lib/libX.so: undefined reference to `SHA512@OPENSSL_0.9.8'
...

編集:

おそらくもっと情報を追加する必要があります。openssl 0.9.8 をコンパイルして、プレフィックス /usr/local にインストールしようとしました。しかし、このライブラリを見つけたように見えても、ビルド時にまだエラーがあります:

/usr/local/lib/libX.so: undefined reference to `SHA512@OPENSSL_0.9.8'
...

libcrypto はこれを定義しているようです:

$ nm /usr/local/ssl/lib/libcrypto.so.0.9.8 | grep SHA512
000000000006f9b0 T SHA512
...

次のスクリプトを使用してコンパイルしています。

export LD_LIBRARY_PATH+=:/usr/local/ssl/lib
gcc -I/usr/local/include/ test.c -o test -lX

これは、libX での ldd の出力です。

$ ldd /usr/local/lib/libX.so              
/usr/local/lib/libX.so: /usr/local/ssl/lib/libcrypto.so.0.9.8: no version information available (required by /usr/local/lib/libX.so)
libssl.so.0.9.8 => /usr/local/ssl/lib/libssl.so.0.9.8 (0x00007f9c4e329000)
libcrypto.so.0.9.8 => /usr/local/ssl/lib/libcrypto.so.0.9.8 (0x00007f9c4df99000)
...
4

2 に答える 2

0

元の OpenSSL ライブラリはバージョン スクリプトを使用して構築されているためです。これは、異なるバージョンのライブラリを使用しても正しいシンボルを取得できるようにするための機能です。

次のように独自のものを追加できます。

OPENSSL_0.9.8 {
 *;
};

そして、 --version-script でリンクします

OpenSSL でこれを行うには、おそらく Makefile を編集する必要があります。

于 2012-11-29T06:48:44.800 に答える