64ビットUbuntuで32ビットPythonを実行できません:共有ライブラリの読み込みエラー:libutil.so.1

64ビットUbuntuで32ビットPythonを実行できません:共有ライブラリの読み込みエラー:libutil.so.1

64ビットUbuntu 12.04で32ビットバージョンのPythonを実行しようとしています。この特定のバイナリを実行する方法はいくつかありますが、回避策ではなくエラーの原因を理解することに興味があります。

私が受け取った完全なエラーは次のとおりです。

/build/toolchain/lin32/python-2.7.1/bin/python: error while loading shared libraries: libutil.so.1: cannot open shared object file: No such file or directory

ldd不足している正確なライブラリパスを確認するために、自分のコンピュータで実行されているのと同じシステムを使用している友人がいます。

$ ldd /build/toolchain/lin32/python-2.7.1/bin/python
    linux-gate.so.1 =>  (0xf77c5000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf778e000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7789000)
    libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0xf7784000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7758000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf75ae000)
    /lib/ld-linux.so.2 (0xf77c6000)

私のシステムでは、libutil.so.1行について次のようになります。

libutil.so.1 => not found

興味深いことに、私のコンピュータには私の友人と同じ共有ライブラリがあります。

$ ls /lib/i386-linux-gnu/libutil.so.1 
/lib/i386-linux-gnu/libutil.so.1

それでは、このライブラリがありますが、なぜPythonがそれを見つけることができないのですか?

最新のPythonがうまく動作していることは注目に値し、ツールチェーンのPython 2.7.1の64ビット版もうまく機能します。

更新:これはstrace出力です。

$ strace /build/toolchain/lin32/python-2.7.1/bin/python
execve("/build/toolchain/lin32/python-2.7.1/bin/python", ["/build/toolchain/lin32/python-2."...], [/* 46 vars */]) = 0
[ Process PID=6192 runs in 32 bit mode. ]
brk(0)                                  = 0x81b8000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xfffffffff776d000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld-mfert.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=10518, ...}) = 0
mmap2(NULL, 10518, PROT_READ, MAP_PRIVATE, 3, 0) = 0xfffffffff776a000
close(3)                                = 0
open("/opt/McAfee/runtime/2.0/lib/libpthread.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200A\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=60992, ...}) = 0
mmap2(NULL, 332928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7718000
mmap2(0xf7726000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd) = 0xfffffffff7726000
mmap2(0xf7728000, 267392, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xfffffffff7728000
close(3)                                = 0
open("/opt/McAfee/runtime/2.0/lib/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\360\v\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=9892, ...}) = 0
mmap2(NULL, 12400, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xfffffffff7714000
mmap2(0xf7716000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xfffffffff7716000
close(3)                                = 0
open("/lib/tls/i686/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686/sse2", 0xff8a0924) = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686", 0xff8a0924)     = -1 ENOENT (No such file or directory)
open("/lib/tls/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/sse2", 0xff8a0924)     = -1 ENOENT (No such file or directory)
open("/lib/tls/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0xff8a0924)          = -1 ENOENT (No such file or directory)
open("/lib/i686/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/i686/sse2", 0xff8a0924)    = -1 ENOENT (No such file or directory)
open("/lib/i686/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/i686", 0xff8a0924)         = -1 ENOENT (No such file or directory)
open("/lib/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/sse2", 0xff8a0924)         = -1 ENOENT (No such file or directory)
open("/lib/libutil.so.1", O_RDONLY)     = -1 ENOENT (No such file or directory)
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/i686/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686/sse2", 0xff8a0924) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/i686/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686", 0xff8a0924) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/sse2", 0xff8a0924) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls", 0xff8a0924)      = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686/sse2", 0xff8a0924) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686", 0xff8a0924)     = -1 ENOENT (No such file or directory)
open("/usr/lib/sse2/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/sse2", 0xff8a0924)     = -1 ENOENT (No such file or directory)
open("/usr/lib/libutil.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0
writev(2, [{"/build/toolchain/lin32/python-2."..., 46}, {": ", 2}, {"error while loading shared libra"..., 36}, {": ", 2}, {"libutil.so.1", 12}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2}, {"No such file or directory", 25}, {"\n", 1}], 10/build/toolchain/lin32/python-2.7.1/bin/python: error while loading shared libraries: libutil.so.1: cannot open shared object file: No such file or directory
) = 158
exit_group(127)                         = ?

Gillesの出力要求:

$ ls -l /lib*/ld-*.so*
-rwxr-xr-x  1 root root 156872 Nov  1  2012 /lib64/ld-2.12.so
lrwxrwxrwx  1 root root     10 Nov 19  2012 /lib64/ld-linux-x86-64.so.2 -> ld-2.12.so
lrwxrwxrwx  1 root root     20 Nov 19  2012 /lib64/ld-lsb-x86-64.so -> ld-linux-x86-64.so.2
lrwxrwxrwx. 1 root root     20 Oct 25  2012 /lib64/ld-lsb-x86-64.so.3 -> ld-linux-x86-64.so.2
-rwxr-xr-x  1 root root 142472 Nov  1  2012 /lib/ld-2.12.so
lrwxrwxrwx  1 root root     10 Nov 19  2012 /lib/ld-linux.so.2 -> ld-2.12.so
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
$ for f in /etc/ld.so.conf.d/*; do echo "File: $f"; cat "$f"; done
File: /etc/ld.so.conf.d/i386-linux-gnu_GL.conf
File: /etc/ld.so.conf.d/i686-linux-gnu.conf
# Multiarch support
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/lib/i686-linux-gnu
/usr/lib/i686-linux-gnu
File: /etc/ld.so.conf.d/libc.conf
# libc default configuration
/usr/local/lib
File: /etc/ld.so.conf.d/nvidia_settings.conf
/usr/lib/nvidia-settings
File: /etc/ld.so.conf.d/x86_64-linux-gnu.conf
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
File: /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf
/usr/lib/nvidia-current
/usr/lib32/nvidia-current
File: /etc/ld.so.conf.d/zz_i386-biarch-compat.conf
# Legacy biarch compatibility support
/lib32
/usr/lib32

答え1

使用apt-file:

$  apt-file search  libutil.so.1
libc6: /lib/x86_64-linux-gnu/libutil.so.1
libc6-armel-cross: /usr/arm-linux-gnueabi/lib/libutil.so.1
libc6-armhf-cross: /usr/arm-linux-gnueabihf/lib/libutil.so.1
libc6-i386: /lib32/libutil.so.1

したがって、インストールするとlibc6-i386問題が解決します。

$ sudo apt-get install libc6-i386

それでも問題が解決しない場合は、シンボリックリンクを作成してください(以前に古いファイルをバックアップしてください)。

$ sudo ln -s /lib32/libutil.so.1 /lib/i386-linux-gnu/libutil.so.1

関連情報