What is ldd?
5 ldd examples
Syntax and Options
Related Commands
What is ldd?
ldd is a Linux utility that is used in case a user wants to know the shared library dependencies of an executable or even that of a shared library.
5 ldd Examples
1. Basic example to find the dependency of an executable or shared library.
$ ldd execv linux-vdso.so.1 => (0x00007fff3e1f3000) libc.so.6 => /lib/libc.so.6 (0x00007f621f162000) /lib64/ld-linux-x86-64.so.2 (0x00007f621f504000)
$ ldd libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 (0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
In the above examples we tried to run the ldd command on an executable ‘execv’ and a shared library ‘libshared.so’ and as you can see that the ldd command output provided the shared library dependencies.
2. Produce more information in output
Use -v option for this.
Lets take an example :
$ ldd -v libshared.so linux-vdso.so.1 => (0x00007fff627a8000) libc.so.6 => /lib/libc.so.6 (0x00007f1778f70000) /lib64/ld-linux-x86-64.so.2 (0x00007f1779514000) Version information: ./libshared.so: libc.so.6 (GLIBC_2.2.5) => /lib/libc.so.6 /lib/libc.so.6: ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2 ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
So we see that along with the dependency information, a whole lot of information related to symbol versions etc is produced in output.
3. To display unused direct dependencies
Use -u option for this.
Lets take an example :
$ ldd -u func Unused direct dependencies: /usr/lib/libstdc++.so.6 /lib/libm.so.6 /lib/libgcc_s.so.1
So we see that the above output suggests unused dependencies.
4. ldd works only on dynamic executables
Use -r option for this.
Lets take an example:
$ ldd -r assert.o not a dynamic executable
As can be seen in the output, a clear message is displayed stating that the supplied file is not a dynamic executable.
5. ldd requires full path to the dynamic executable
Till now I have given examples of my custom executables and shared libraries. Lets try ldd on a standard command line executable like ‘ls’:
$ ldd ls ldd: ./ls: No such file or directory
So we see that ldd complains that it cannot find ‘ls’.
Now lets try with complete path :
$ ldd /bin/ls linux-vdso.so.1 => (0x00007fff16b71000) librt.so.1 => /lib/librt.so.1 (0x00007fa1bd775000) libselinux.so.1 => /lib/libselinux.so.1 (0x00007fa1bd557000) libacl.so.1 => /lib/libacl.so.1 (0x00007fa1bd34e000) libc.so.6 => /lib/libc.so.6 (0x00007fa1bcfcb000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fa1bcdae000) /lib64/ld-linux-x86-64.so.2 (0x00007fa1bd99c000) libdl.so.2 => /lib/libdl.so.2 (0x00007fa1bcba9000) libattr.so.1 => /lib/libattr.so.1 (0x00007fa1bc9a4000)
So with absolute path, ldd worked fine.
Syntax and Options
ldd [OPTION]... FILE...
Short Option | Long Option | Option Description |
---|---|---|
-v | –verbose | Print all information, including e.g. symbol versioning information. |
-d | –data-relocs | Perform relocations and report any missing objects (ELF only). |
-r | –function-relocs | Perform relocations for both data objects and functions, and report any missing objects or functions (ELF only). |
-u | –unused | Print unused direct dependencies. |
–help | Usage information. |
Related Commands
ldconfig
ld.so