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

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.sosに)

32 ビット バイナリを実行しようとすると、すべて正常です。コンパイルは正常に行われ (少し変更した gccspecsファイルを使用しています)、リンクも正常に行われ、正常に実行されます。

を試行するとldd /path/to/example/32bit/binary、 と表示されますnot a dynamic executable。これは、実行ファイルを開くためのリンカーが見つからないことが原因であると理解しています。

readelf -l example_binary | grep interpreter[Requesting program interpreter: /lib32/ld-linux.so.2]予想通り、が返されます。

なぜこのようなことが起こるのか、またどうすれば修正できるのか、何かアイデアはありますか?

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

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

答え1

これはかなり簡単であることがわかりました。

/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/..."問題はすぐに解決されました。

Ps (gobject-introspection のインストールに苦労している他の人の役に立つかもしれないのでここに追加します) この解決策は、ライブラリを解決するために呼び出される gobject-introspection をインストールしようとする場合にも役立ちますldd

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

関連情報