5 UNIX / Linux ldd Command Examples

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