Can’t install 32 bit gstreamer-ffmpeg normally, library can’t find other 32 bit libs

32bitffmpeglibraries

I'm on Ubuntu 12.04 64 bits and I'm trying to get a game (GTA SA) working in wine, but it keeps crashing. After reading error logs it seems I needed some 32 bit versions of gstreamer, probably to play the intro video. I already have ia32-libs, because I read somewhere I will need that in order to run 32 bit software. I first tried:

sudo apt-get install gstreamer0.10-ffmpeg:i386

Which returns:

 gstreamer0.10-ffmpeg:i386 : Depends: libavcodec53:i386 (>= 4:0.7.3-1) but it is not going to be installed or
                                      libavcodec-extra-53:i386 (>= 4:0.7.3-1) but it is not going to be installed

And it also depends on libavformat, libpostproc and libswscale with about the same error. So I kept searching and found a nice tool, getlibs, which allows you to install 32 bit libraries. I think it just places them in the /usr/lib32 directory, which probably isn't the best way to do this, but I tried it anyway.

So I installed the 32 bit libraries with getlibs which wine was complaining about. Now I got different errors, basically the 32 bit library is referencing other libraries which it now can't find. For example one of the errors says:

Failed to load plugin '/usr/lib32/gstreamer-0.10/libgstffmpeg.so': libavformat.so.53: cannot open shared object file: No such file or directory

So my initial thought was correct, since it now uses the 32 bit version. Now I was trying to figure it out with ldd to see where the library references other libraries:

# This one is fine
ldd /usr/lib/gstreamer-0.10/libgstffmpeg.so | grep avformat
libavformat.so.53 => /usr/lib/x86_64-linux-gnu/libavformat.so.53 (0x00007f8314181000)

# This one isn't
ldd /usr/lib32/gstreamer-0.10/libgstffmpeg.so | grep avformat
libavformat.so.53 => not found

So indeed, libgstffmpeg.so can't find the correct libavformat.so. I tried installing the 32 bit version of libavformat with getlibs again, which placed it in /usr/lib32/i386-linux-gnu/libavformat.so. But ldd still tells me it can't find libavformat. Then I tried to make a symbolic link in the same directory but named it libavformat.so.53 and even made a symlink to `/usr/lib/i386-linux-gnu/libavformat.so.53', but both give me the same error.

Now I am sure this really isn't the correct way to go, but I didn't know the right way to do it. So what is the correct way to do this, or does gstreamer0.10-ffmpeg simply doesn't have 32 bit or multilib support? And how can I find out what the directory is, where libgstffmpeg (or any library I guess) checks for it's 32 bit libs it is referencing?

Best Answer

Try:

ldconfig -p | grep lib32

If you see no output, this is because the linker cache (read the first paragraph of man ldconfig, and about the -p switch) does not reference /usr/lib32. I checked a ubuntu 12.04 system and that is not in there by default. You can add it to: /etc/ld.so.conf.d/libc.conf which may contain just /usr/local/lib. Run just ldconfig, then the -p command from above. You should see the stuff in /usr/lib32; now try your ldd on the 32-bit gstreamer lib again.

Related Question