The Linux Programming Interface

(nextflipdebug5) #1
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”
Free download pdf