Viewing shared library search order


When debugging library search path problems, it is often useful to see which libraries are used, and the order in which they are accessed. This is easily accomplished with the Solaris ldd(1m) utilities “-s” option:

$ ldd -ss /usr/sfw/bin/wget |more

find object=libsocket.so.1; required by /usr/sfw/bin/wget
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libsocket.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libsocket.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1

find object=libnsl.so.1; required by /usr/sfw/bin/wget
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libnsl.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libnsl.so.1
libnsl.so.1 => /usr/lib/libnsl.so.1

find object=libc.so.1; required by /usr/sfw/bin/wget
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libc.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libc.so.1
libc.so.1 => /usr/lib/libc.so.1

find object=libnsl.so.1; required by /usr/lib/libsocket.so.1
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libnsl.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libnsl.so.1

find object=libc.so.1; required by /usr/lib/libsocket.so.1
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libc.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libc.so.1

find object=libdl.so.1; required by /usr/lib/libnsl.so.1
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libdl.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libdl.so.1
libdl.so.1 => /usr/lib/libdl.so.1

find object=libc.so.1; required by /usr/lib/libnsl.so.1
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libc.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libc.so.1

find object=libmp.so.2; required by /usr/lib/libnsl.so.1
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libmp.so.2
search path=/usr/lib (default)
trying path=/usr/lib/libmp.so.2
libmp.so.2 => /usr/lib/libmp.so.2

find object=libdl.so.1; required by /usr/lib/libc.so.1
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libdl.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libdl.so.1

find object=libc.so.1; required by /usr/lib/libmp.so.2
search path=/usr/local/lib (LD_LIBRARY_PATH)
trying path=/usr/local/lib/libc.so.1
search path=/usr/lib (default)
trying path=/usr/lib/libc.so.1

object=/usr/lib/libc.so.1; filter for /usr/platform/$PLATFORM/lib/libc_psr.so.1

find object=/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1; required by /usr/lib/libc.so.1
/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1

object=/usr/lib/libdl.so.1; filter for /usr/lib/ld.so.1

I find this useful for finding references to outdated libraries, and libraries that are not located in standard locations (e.g., /usr/lib).

This article was posted by Matty on 2005-10-06 00:41:00 -0400 EDT