web-dev-qa-db-ja.com

LDが「利用可能なバージョン情報なし」を出力し続ける理由

Libをロードするたびに、エラーが発生します。

利用可能なバージョン情報はありません

このライブラリは、それを実行しているPC(mandriva 2010.2)とは別のPC(ubuntu 10.04)でコンパイルされています。

$ ldd /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so
/usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so: /lib/libz.so.1: no version information available (required by /usr/local/gnu-eabi-4.5.2/i686-pc-linux-gnu/arm-eabi/lib/libbfd-2.21.so)
 linux-gate.so.1 =>  (0xffffe000)
 libz.so.1 => /lib/libz.so.1 (0xb77a7000)
 libc.so.6 => /lib/i686/libc.so.6 (0xb7655000)
 /lib/ld-linux.so.2 (0xb787a000)

編集:回避策は機能しませんでした。

7
ofaurax

いいえ、ありません。プログラムをコンパイルしたときにリンクしたlibzのバージョンが、使用しているmadrivaシステムのバージョンとは異なるツールでビルドされたことを意味しているようです。 mandrivaコピーには、プログラムが最初にリンクしたlibzライブラリのコピーに存在していたシンボルバージョン情報がありません。これは、libzライブラリ自体のバージョンではなく、それぞれのビルド環境の違いと関係があります。

バイナリと同じツールセットで構築されたlibzのコピー、つまり、シンボルバージョンをライブラリに挿入するツールセットを提供するまで、メッセージが表示され続けると思います。または、libzがmandrivaシステムでコンパイルされたときに使用されたものと同様のツールを使用してバイナリをビルドし、シンボルバージョン参照がバイナリに存在しないようにします。

参照: http://harmful.cat-v.org/software/dynamic-linking/versioned-symbols http://www.linux-kongress.org/1997/youngdale.html http://www.usenix.org/publications/library/proceedings/als00/2000papers/papers/full_papers/browndavid/browndavid_html/

他のシステムでコンパイルされたバイナリを変更して、不要なシンボルバージョンの参照を削除し、必要に応じて他のすべてを残すことができるツールは知りません。

10
Eponymous

「利用可能なバージョン情報がありません」というエラーは、ライブラリをコンパイルしたときにリンクしたlibzのバージョンが、使用しているmandriviaシステムのバージョンよりも新しいことを意味します。

3
jsbillings