64ビットUbuntu Onericで32ビット実行ファイルを実行する

64ビットUbuntu Onericで32ビット実行ファイルを実行する

64 ビット Ubuntu で 32 ビット実行ファイルを実行しようとしています。状況の簡単な概要を以下に示します。ただし、ia32 ライブラリがインストールされていることを先頭に追加する必要があります。

> aptitude search ia32
i   ia32-libs - ia32 shared libraries for use on amd64 and ia64 syste

まず最初にファイルタイプをテストしました:

> file tipp10
tipp10: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped

まだ再起動していないため、それほど新しいカーネルではない 64 ビットの Oneric を使用しています。

> uname -a
Linux christchurch 3.0.0-14-generic #23-Ubuntu SMP Mon Nov 21 20:28:43 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

前述したように、通常の実行は機能しません。ファイルまたはディレクトリが見つからないため、中止されます。

> strace ./tipp10
execve("./tipp10", ["./tipp10"], [/* 46 vars */]) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
[...]

私のシステムでの ldd 出力は次のとおりです。64 ビット Debian サーバーでは、プログラムは動的リンク プログラムとして認識され、出力にいくつかのライブラリ参照が表示されます。しかし、Ubuntu では次のようになります。

> ldd tipp10
    \tdas Programm ist nicht dynamisch gelinkt
# german for: "The programm is not linked dynamic"

何が起こっているのか分かりません。

答え1

libc6-i386 が正しくインストールされていることを確認してください。ダイナミック リンカーが不足していることENOENTが示唆されています。execve

関連情報