Can't run 32 bit python on 64 bit Ubuntu: error while loading shared libraries: libutil.so.1

6,014

Using 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

So installing libc6-i386 should solve your problem.

$ sudo apt-get install libc6-i386

If it still does not work you can try to create a symlink (backup the older file previously!):

$ sudo ln -s /lib32/libutil.so.1 /lib/i386-linux-gnu/libutil.so.1
Share:
6,014

Related videos on Youtube

DMM
Author by

DMM

Updated on September 18, 2022

Comments

  • DMM
    DMM over 1 year

    I'm trying to run a 32 bit version of python on 64 bit Ubuntu 12.04. There are alternatives to running this specific binary, but I'm more interested in understanding what's causing the error than workarounds for it.

    This is the full error I'm getting:

    /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
    

    I got a friend who is using the same system to run ldd on his machine to see the exact library path that was missing:

    $ 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)
    

    On my system, for the libutil.so.1 line I get

    libutil.so.1 => not found
    

    The interesting thing is that I do have the same shared library my friend has on my machine:

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

    So if I have the library, why can't python find it?

    It might be worth noting that the latest python works fine and even the 64 bit version of python 2.7.1 that's in the toolchain works fine.

    Update: Here is the strace output:

    $ 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)                         = ?
    

    Output request by 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
    
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' almost 11 years
      If you run sudo ldconfig and try again, does it help? If you run LD_PRELOAD=/lib/i386-linux-gnu/libutil.so.1 /build/toolchain/lin32/python-2.7.1/bin/python, do you get the same error message? Please post the output of strace /build/toolchain/lin32/python-2.7.1/bin/python (first install strace if you don't have it).
    • DMM
      DMM almost 11 years
      @Gilles sudo ldconfig doesn't help, but setting the LD_PRELOAD did work. Is there a reason it wasn't on there by default? Is there a way I can put it on there without setting an environment variable? Also, would you still like the strace output?
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' almost 11 years
      Yes, please post the strace output. LD_PRELOAD tells us that the file works but wasn't found (it could have been that the file exists but failed to load because it was corrupted in some bizarre way, though most corruptions would have led to a different message). I hope the strace output will show where the executable is looking for the library and compare where it's looking for other libraries.
    • DMM
      DMM almost 11 years
      @Gilles Just added it.
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' almost 11 years
      I'll blame McAfee by default. It's probably doing something wrong. Do you still have the original loader around? What's the output of ls -l /lib*/ld-*.so*? What do /etc/ld.so.conf and the files in /etc/ld.so.conf.d contain?
    • DMM
      DMM almost 11 years
      @Gilles Added it.
    • DMM
      DMM almost 11 years
      @Gilles If you saw the post in the last 6 minutes before this comment you would have seen the output for the wrong machine (the working machine). I just updated it with the output from the right machine, so just refresh the page.
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' almost 11 years
      I can't see anything wrong in your setup, not even a trace of McAfee in the loader installation or in the library path. Yet McAfee shows up in the strace! Do you know anything about the McAfee installation? Can you bypass it?
  • DMM
    DMM almost 11 years
    I already had libc6-i386 installed and update, and the symlink didn't help.
  • Salem
    Salem almost 11 years
    What about LD_LIBRARY_PATH=/lib32/libutil.so.1:$LD_LIBRARY_PATH /build/toolchain/lin32/python-2.7.1/bin/python?
  • DMM
    DMM almost 11 years
    Still no luck. This is a very strange error.
  • Gilles 'SO- stop being evil'
    Gilles 'SO- stop being evil' almost 11 years
    Sorry, good try, but no, that can't be it. Without the libc6-i386 package, the executable wouldn't have started at all, before even looking for its libraries — see askubuntu.com/questions/231479/…