Linux - Shared libs - LD_DEBUG environment variable
LD_DEBUG:
Useful environment variable in the GNU C loader is LD_DEBUG. This triggers the dl* functions so that they give quite verbose information on what they are doing.
Valid Options:
libs display library search paths
reloc display relocation processing
files display progress for input file
symbols display symbol table processing
bindings display information about symbol binding
versions display version dependencies
all all previous options combined
statistics display relocation statistics
unused determined unused DSOs
help display this help message and exit
To direct the debugging output into a file instead of standard output
a filename can be specified using the LD_DEBUG_OUTPUT environment variable.
Example:
shell> LD_DEBUG=all ls
15635:
15635: file=librt.so.1 [0]; needed by ls [0]
15635: find library=librt.so.1 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/librt.so.1
15635:
15635: file=librt.so.1 [0]; generating link map
15635: dynamic: 0x00000039a2807db0 base: 0x0000000000000000 size: 0x0000000000208bd0
15635: entry: 0x00000039a26022d0 phdr: 0x00000039a2600040 phnum: 9
15635:
15635:
15635: file=libselinux.so.1 [0]; needed by ls [0]
15635: find library=libselinux.so.1 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libselinux.so.1
15635:
15635: file=libselinux.so.1 [0]; generating link map
15635: dynamic: 0x000000366ae1add8 base: 0x0000000000000000 size: 0x000000000021c6b0
15635: entry: 0x000000366ac05220 phdr: 0x000000366ac00040 phnum: 8
15635:
15635:
15635: file=libcap.so.2 [0]; needed by ls [0]
15635: find library=libcap.so.2 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libcap.so.2
15635:
15635: file=libcap.so.2 [0]; generating link map
15635: dynamic: 0x00000039a80034b0 base: 0x0000000000000000 size: 0x00000000002038a0
15635: entry: 0x00000039a7e01410 phdr: 0x00000039a7e00040 phnum: 6
15635:
15635:
15635: file=libacl.so.1 [0]; needed by ls [0]
15635: find library=libacl.so.1 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libacl.so.1
15635:
15635: file=libacl.so.1 [0]; generating link map
15635: dynamic: 0x0000003c64c06a90 base: 0x0000000000000000 size: 0x0000000000206ef0
15635: entry: 0x0000003c64a01d50 phdr: 0x0000003c64a00040 phnum: 6
15635:
15635:
15635: file=libc.so.6 [0]; needed by ls [0]
15635: find library=libc.so.6 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libc.so.6
15635:
15635: file=libc.so.6 [0]; generating link map
15635: dynamic: 0x00000039a116bb40 base: 0x0000000000000000 size: 0x0000000000371278
15635: entry: 0x00000039a0e1e6a0 phdr: 0x00000039a0e00040 phnum: 10
15635:
15635:
15635: file=libpthread.so.0 [0]; needed by /lib64/librt.so.1 [0]
15635: find library=libpthread.so.0 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libpthread.so.0
15635:
15635: file=libpthread.so.0 [0]; generating link map
15635: dynamic: 0x00000039a1c16da8 base: 0x0000000000000000 size: 0x000000000021b370
15635: entry: 0x00000039a1a057f0 phdr: 0x00000039a1a00040 phnum: 9
15635:
15635:
15635: file=libdl.so.2 [0]; needed by /lib64/libselinux.so.1 [0]
15635: find library=libdl.so.2 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libdl.so.2
15635:
15635: file=libdl.so.2 [0]; generating link map
15635: dynamic: 0x00000039a1802da0 base: 0x0000000000000000 size: 0x0000000000203100
15635: entry: 0x00000039a1600de0 phdr: 0x00000039a1600040 phnum: 9
15635:
15635:
15635: file=libattr.so.1 [0]; needed by /lib64/libacl.so.1 [0]
15635: find library=libattr.so.1 [0]; searching
15635: search cache=/etc/ld.so.cache
15635: trying file=/lib64/libattr.so.1
15635:
15635: file=libattr.so.1 [0]; generating link map
15635: dynamic: 0x0000003c68603a18 base: 0x0000000000000000 size: 0x0000000000203d58
15635: entry: 0x0000003c68401300 phdr: 0x0000003c68400040 phnum: 6
15635:
15635: checking for version `GLIBC_2.2.5' in file /lib64/librt.so.1 [0] required by file ls [0]
15635: checking for version `ACL_1.0' in file /lib64/libacl.so.1 [0] required by file ls [0]
15635: checking for version `GLIBC_2.4' in file /lib64/libc.so.6 [0] required by file ls [0]
15635: checking for version `GLIBC_2.3' in file /lib64/libc.so.6 [0] required by file ls [0]
15635: checking for version `GLIBC_2.3.4' in file /lib64/libc.so.6 [0] required by file ls [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file ls [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/librt.so.1 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libpthread.so.0 [0] required by file /lib64/librt.so.1 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/libpthread.so.0 [0] required by file /lib64/librt.so.1 [0]
15635: checking for version `GLIBC_2.3.2' in file /lib64/libc.so.6 [0] required by file /lib64/librt.so.1 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/librt.so.1 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/libc.so.6 [0] required by file /lib64/librt.so.1 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libdl.so.2 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.3' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.4' in file /lib64/libc.so.6 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.8' in file /lib64/libc.so.6 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.3' in file /lib64/libc.so.6 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.3.4' in file /lib64/libc.so.6 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/libselinux.so.1 [0]
15635: checking for version `GLIBC_2.3.4' in file /lib64/libc.so.6 [0] required by file /lib64/libcap.so.2 [0]
15635: checking for version `GLIBC_2.4' in file /lib64/libc.so.6 [0] required by file /lib64/libcap.so.2 [0]
15635: checking for version `GLIBC_2.8' in file /lib64/libc.so.6 [0] required by file /lib64/libcap.so.2 [0]
15635: checking for version `GLIBC_2.3' in file /lib64/libc.so.6 [0] required by file /lib64/libcap.so.2 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/libcap.so.2 [0]
15635: checking for version `ATTR_1.0' in file /lib64/libattr.so.1 [0] required by file /lib64/libacl.so.1 [0]
15635: checking for version `GLIBC_2.4' in file /lib64/libc.so.6 [0] required by file /lib64/libacl.so.1 [0]
15635: checking for version `GLIBC_2.3.4' in file /lib64/libc.so.6 [0] required by file /lib64/libacl.so.1 [0]
15635: checking for version `GLIBC_2.3' in file /lib64/libc.so.6 [0] required by file /lib64/libacl.so.1 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/libacl.so.1 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libc.so.6 [0]
15635: checking for version `GLIBC_2.3' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libc.so.6 [0]
15635: checking for version `GLIBC_2.3' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libpthread.so.0 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libpthread.so.0 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libpthread.so.0 [0]
15635: checking for version `GLIBC_2.3.2' in file /lib64/libc.so.6 [0] required by file /lib64/libpthread.so.0 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/libc.so.6 [0] required by file /lib64/libpthread.so.0 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/libpthread.so.0 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libdl.so.2 [0]
15635: checking for version `GLIBC_PRIVATE' in file /lib64/libc.so.6 [0] required by file /lib64/libdl.so.2 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/libdl.so.2 [0]
15635: checking for version `GLIBC_2.4' in file /lib64/libc.so.6 [0] required by file /lib64/libattr.so.1 [0]
15635: checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file /lib64/libattr.so.1 [0]
15635:
15635: prelink checking: ok
15635:
15635: conflict processing: ls
15635:
15635: calling init: /lib64/libpthread.so.0
15635:
15635:
15635: calling init: /lib64/libc.so.6
15635:
15635: symbol=gettimeofday; lookup in file=ls [0]
15635: binding file ls [0] to ls [0]: normal symbol `gettimeofday' [LINUX_2.6]
15635: symbol=clock_gettime; lookup in file=ls [0]
15635: binding file ls [0] to ls [0]: normal symbol `clock_gettime' [LINUX_2.6]
15635:
15635: calling init: /lib64/libattr.so.1
15635:
15635:
15635: calling init: /lib64/libdl.so.2
15635:
15635:
15635: calling init: /lib64/libacl.so.1
15635:
15635:
15635: calling init: /lib64/libcap.so.2
15635:
15635:
15635: calling init: /lib64/libselinux.so.1
15635:
15635:
15635: calling init: /lib64/librt.so.1
15635:
15635:
15635: initialize program: ls
15635:
15635:
15635: transferring control: ls
15635:

Comments