Quiz Entry - updated: 2026.07.14
What tools can you use to examine dynamic linking?
ldd lists library dependencies, readelf -d shows the dynamic section, objdump -R the dynamic relocations, nm -D the dynamic symbols, and LD_DEBUG traces the linker at runtime.
| Tool | Purpose | Example |
|---|---|---|
| ldd | List shared library dependencies | ldd ./program |
| readelf -d | Show dynamic section | readelf -d ./program |
| objdump -R | Show dynamic relocations | objdump -R ./program |
| nm -D | Show dynamic symbols | nm -D libfoo.so |
| LD_DEBUG | Trace dynamic linker | LD_DEBUG=all ./program |
ldd example:
$ ldd /bin/ls
linux-vdso.so.1 (0x00007ffe...)
libselinux.so.1 => /lib/x86_64.../libselinux.so.1
libc.so.6 => /lib/x86_64.../libc.so.6
/lib64/ld-linux-x86-64.so.2
LD_DEBUG options:
# Show available options
$ LD_DEBUG=help ./program
# Library search
$ LD_DEBUG=libs ./program
# Symbol resolution
$ LD_DEBUG=symbols ./program
# Show all bindings
$ LD_DEBUG=bindings ./program
# Everything
$ LD_DEBUG=all ./program
Tip: LD_DEBUG is invaluable for diagnosing "symbol not found" errors in complex applications.
Go deeper:
ld.so(8) — LD_DEBUG and friends — the environment knobs (
LD_DEBUG,LD_TRACE_LOADED_OBJECTS) that trace linking at runtime.