Fundamentals of Shared Libraries 843
Figure 41-2: Execution of a program that loads a shared library
41.5 Useful Tools for Working with Shared Libraries
In this section, we briefly describe a few tools that are useful for analyzing shared
libraries, executable files, and compiled object (.o) files.
The ldd command
The ldd(1) (list dynamic dependencies) command displays the shared libraries that
a program (or a shared library) requires to run. Here’s an example:
$ ldd prog
libdemo.so.1 => /usr/lib/libdemo.so.1 (0x40019000)
libc.so.6 => /lib/tls/libc.so.6 (0x4017b000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
ld-linux.so
Header
Program header
Shared object dependencies:
/lib/ld-linux.so.2
mod1.o code libbar.so
mod2.o code
mod3.o code
libfoo.so
prog.o code
prog libbar.so
$ LD_LIBRARY_PATH=. ./prog
1
Process created; dynamic
loader (ld-linux.so) and
prog loaded into memory
environ: LD_LIBRARY_PATH=.
prog.o code
2
Dynamic linker
examines shared
object dependencies
3 libbar.so
found in “.”.
libfoo.so
4
libfoo.so
loaded into
virtual memory
process virtual
memory
Current directory
file system
Program header
Shared object dependencies:
/lib/ld-linux.so.2
libbar.so
symbolic link
to “libfoo.so”