Search code examples
linuxarmshared-librariesgstreamer

Program on ARM cannot find shared library while ldconfig finds it


I have compiled my own shared library "libgsttest.so" which I put in /usr/lib/test

/usr/lib/test/libgsttest.so

I added a file "test.conf" in /etc/ld.so.conf.d containing one line:

/usr/lib/test

the I run ldconfig. To check whether ldconfig found the library, i run:

ldconfig -p | grep test
libgsttest.so (libc6) => /usr/lib/test/libgsttest.so

This shared library is used by a gstreamer plugin (but my guess is that that doesn't really matter to the problem). When I start my plugin, linux protests:

Could not load plugin file: Opening module failed: libgsttest.so: cannot open shared object file: No such file or directory

any ideas why my program cannot find my .so while ldconfig finds it?

EDIT: I have the exact same configuration running on an Opensuse 13.1 with an intel processor where I have no problems!

EDIT 2: some more details on my configuration:

  • OpenSuse 13.1 - Intel - 64 bit OS.
  • ARM Opensuse 13.1 inside qemu emulation (on the OS mentioned above); so this is not a native arm OS...

EDIT 3: I am sure the library is in the correct format: since putting it in /usr/lib and running ldconfig fixes the problem. The real question remains: why doens't my program find it when it's in the subdir?


Solution

  • I just found a workaround which seems to have helped:

    I put my library in /usr/lib/ and ran ldconfig --> everything works

    I remove my library from /usr/lib --> everything keeps working.

    Maybe ldconfig tries to be too smart; and didn't notice any changes in /usr/lib/test/ since it wasn't tracking this folder before. By changing something in /usr/lib/ I might have forced him to do a real refresh?