web-dev-qa-db-ja.com

64ビットシステムで32ビットバイナリを使用するldd-実行されますが、レポートされません

私のリンカーは

_/lib{32,64}/ld-2.20.so_、シンボリックリンク付き

_/lib32/ld-linux.so.2_および

_/lib64/ld-linux-x86-64.so.2_(適切な_ld-2.20.so_ sへ)

32ビットのバイナリを実行しようとすると、すべてうまくいきます。それらは正常にコンパイルされ(私はわずかに変更されたgcc specsファイルを使用しています)、一見正常にリンクし、正常に実行されます。

_ldd /path/to/example/32bit/binary_を試してみると、_not a dynamic executable_と言われます。私の理解では、これは実行可能ファイルを開くためのリンカーが見つからないためです。

_readelf -l example_binary | grep interpreter_は、予想どおり_[Requesting program interpreter: /lib32/ld-linux.so.2]_を提供します。

なぜこれが起こっているのか/どうすれば修正できますか?

P.s. -「Sudoaptgetを使用して32ビット互換ライブラリをインストールします...」apt/pacman/etceteraがないため、役に立ちません。特定の(32ビット)ライブラリを再インストールする必要がある場合は、それを知っておくと役に立ちます。

Pps-gccによって_/usr/lib{32,64}/libc.so_にインストールされたスクリプトファイルは、適切な(実際の)_libc.so.6_ファイルと_libc_nonshared.a_ファイルをグループ化し、末尾にAS_NEEDED ( /lib32/ld-linux.so.2 ) )を付けます。 lib32の終わり

3
chrisb2244

これは非常に簡単です。

/usr/bin/lddは単なるスクリプトファイルです。

スクリプトファイルを開くと、上部に次の行が表示されます。これは、最初は(私のシステムでは)次のようになっています。

RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2"

この行をRTLDLIST="/lib32/ld-linux.so.2 /lib64/..."に変更すると、すぐに問題が修正されました。

P.s. (他の誰かがgobject-introspectionのインストールに苦労している場合に備えて、ここに追加します)このソリューションは、ライブラリを解決するためにlddを呼び出すため、gobject-introspectionをインストールしようとする場合にも役立ちます。

そこに表示されたエラーメッセージは次のとおりです:ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

2
chrisb2244