実行するためにいくつかの *.so ファイルが必要なバイナリがあります。古いマシンで実行しようとすると、次のように表示されます
/lib/libc.so.6: version `GLIBC_2.4' not found
/lib/i386-linux-gnu/libc.so.6
検索パスをからに変更するにはどうすればよいですか/lib/libc.so.6
したがって、同じマシンで 2 つの異なる libc ファイルを実行できます。
実行するためにいくつかの *.so ファイルが必要なバイナリがあります。古いマシンで実行しようとすると、次のように表示されます
/lib/libc.so.6: version `GLIBC_2.4' not found
/lib/i386-linux-gnu/libc.so.6
検索パスをからに変更するにはどうすればよいですか/lib/libc.so.6
したがって、同じマシンで 2 つの異なる libc ファイルを実行できます。
32ビットシステムを使用していて、64ビットglibcを使用するバイナリを実行しようとしていますか?
ライブラリ検索パスの変更は、LD_LIBRARY_PATH変数を使用して、たとえばサブシェルで実行できます。
(エクスポートLD_LIBRARY_PATH = / lib / i386-linux-gnu:$ {LD_LIBRARY_PATH}; my_program)
64 ビット マシンで 32 ビットの実行可能ファイルを実行する場合は、32 ビット バージョンをインストールする必要があります。Fedora またはその他のシステムで yum を実行:
yum インストール glibc.i686
(.i686 サフィックスに注意してください。具体的には 32 ビット バージョンを要求します)、もう一度やり直してください。ldd(1) コマンドは、必要なライブラリーを識別するのに役立ちます。yum は、与えられた名前でライブラリーを見つけるのに十分なほど賢くなければなりません。
LD_LIBRARY_PATH
バイナリを呼び出すときに、環境変数を使用して検索パスを変更できます。
次のようなもの:
LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6 ./your_binary
動作するはずです。使用しているシェルによっては、変数を呼び出すか、変数を設定する必要がある場合があることに注意してexport
くださいenv
。
次のコマンドを使用して、機能しているかどうかを確認できます。
LD_LIBRARY_PATH=/lib/i386-linux-gnu/libc.so.6libc.so.6 ldd ./your_binary
linux-vdso.so.1 => (0x00007fff140e9000)
libselinux.so.1 => /lib/libselinux.so.1 (0x008f9000)
librt.so.1 => /lib/librt.so.1 (0x006f1000)
libacl.so.1 => /lib/libacl.so.1 (0x004e8000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00129000)
libdl.so.2 => /lib/libdl.so.2 (0x00f25000)
/lib/ld-linux.so.2 (0x003b3b000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d07000)
libattr.so.1 => /lib/libattr.so.1 (0x00b02000)
libc.so.6
必要な共有オブジェクトに解決されているかどうかを確認するだけです。
更新: 64 ビット バイナリの 32 ビット共有オブジェクトをロードしたいようです。私の知る限り、ターゲット アーキテクチャが異なり、ローダーが 32 ビットのロードを拒否するため、これを行う方法はありません。これがあなたのケースである場合、これはローダーがデフォルトをロードする理由を説明している可能性がありますlibc
。ケースによっては、バイナリを 32 ビットとしてコンパイルできる場合があります。その場合、32 ビットで実行する必要がありますlibc
。