Ubuntu – Files exist, but “cannot open shared object file: No such file or directory” 20.04

20.04librariesshared library

I'm trying to run a game (PRIME, an old Rougelike found here) and after downloading the 64 bit linux version, and going to run it, I get this error response:

./prime: error while loading shared libraries: libsigsegv.so.2: cannot
open shared object file: No such file or directory

Now, I've checked that I've got that file in my library, and it's up to date. The last time I asked this question I was able to solve it simply with a sudo-apt-update, sudo-apt-upgrade. That isn't working this time.

(The italicized note above is technically a mistake. I did have that file, but not the i386 version. Take a look at the accepted answer and my comments to see how we discovered that!)

My real item is this, though: Shared library problems are a pretty common error, it seems, and although the library in question changes, the other common issue is that the library exists, but for some reason the executable (or the user?) can't find it?

This is also not the first time I've had this issue on this system.

Is there a general solution or approach to shared library problems?

I came across this using ldconfig but I haven't been able to get it to work.

output of ldd ./prime in the directory with that executable

    linux-gate.so.1 (0xf7f03000)
libsigsegv.so.2 => not found
libnoteye.so => ./libnoteye.so (0xf7e4f000)
libncurses.so.5 => /lib/i386-linux-gnu/libncurses.so.5 (0xf7e26000)
libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xf7e00000)
libpanel.so.5 => /usr/lib/i386-linux-gnu/libpanel.so.5 (0xf7df9000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7c1b000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7b16000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7af7000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7908000)
libSDL-1.2.so.0 => not found
libSDL_image-1.2.so.0 => not found
liblua5.1.so.0 => not found
libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0xf7901000)
libSDL_mixer-1.2.so.0 => not found
libSDL_net-1.2.so.0 => not found
libGL.so.1 => /usr/lib/i386-linux-gnu/libGL.so.1 (0xf7894000)
libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7876000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7870000)
/lib/ld-linux.so.2 (0xf7f04000)
libGLdispatch.so.0 => /usr/lib/i386-linux-gnu/libGLdispatch.so.0 (0xf77f3000)
libGLX.so.0 => /usr/lib/i386-linux-gnu/libGLX.so.0 (0xf77b7000)
libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf7666000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf7637000)
libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf7631000)
libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf7629000)
libbsd.so.0 => /usr/lib/i386-linux-gnu/libbsd.so.0 (0xf760a000)

Best Answer

From ldd, it is clear that prime is a 32bit/i386 build. It requires dependencies from same architecture. We may confirm too using:

file ./prime

We search for each missing library file using apt-file (if installed, be aware it downloads large indexes) or https://packages.ubuntu.com for corresponding package then install it.

sudo apt install libsigsegv2:i386 \
libsdl1.2debian:i386 libsdl-image1.2:i386 liblua5.1-0:i386 \
libsdl-mixer1.2:i386 libsdl-net1.2:i386 
Related Question