LDD

From PCLinuxOSHelp Knowledge Base
Jump to: navigation, search

ldd command --> ldd (List Dynamic Dependencies)

       ldd shows all libraries that it would need to load when starting the application or loading a shared library. 
       readelf -d shows only direct dependencies of the binary. 

How use ldd ?

ldd path_for_your_app_or_lib_which_ you_want_check


Examples

   $ ldd /usr/bin/chacl 

linux-vdso.so.1 (0x00007ffef49e0000) libacl.so.1 => /lib64/libacl.so.1 (0x00007f022ccf3000) libc.so.6 => /lib64/libc.so.6 (0x00007f022c93f000) libattr.so.1 => /lib64/libattr.so.1 (0x00007f022c73b000) /lib64/ld-linux-x86-64.so.2 (0x00007f022cefc000)


   $ readelf -d /usr/bin/chacl | grep NEEDED
   0x0000000000000001 (NEEDED)             Shared library: [libacl.so.1]
   0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]


Other Command Examples

  $ objdump -p /usr/bin/chacl | grep NEEDED
    NEEDED               libacl.so.1
    NEEDED               libc.so.6


  $ LD_TRACE_LOADED_OBJECTS=1 /usr/bin/chacl

linux-vdso.so.1 (0x00007ffd92eef000) libacl.so.1 => /lib64/libacl.so.1 (0x00007f161c6a8000) libc.so.6 => /lib64/libc.so.6 (0x00007f161c2f4000) libattr.so.1 => /lib64/libattr.so.1 (0x00007f161c0f0000) /lib64/ld-linux-x86-64.so.2 (0x00007f161c8b1000)


  $ lddtree /usr/bin/chacl 
   chacl => /usr/bin/chacl (interpreter => /lib64/ld-linux-x86-64.so.2)
    libacl.so.1 => /lib64/libacl.so.1
       libattr.so.1 => /lib64/libattr.so.1
    libc.so.6 => /lib/libc.so.6
       ld-linux.so.2 => /lib/ld-linux.so.2
   lddtree show dependencies hierarchical,
       you see significant dependencies ( libacl.so.1 , libc.so.6 ) 
       and less significant dependencies ( libattr.so.1 , ld-linux.so.2 ) 
   Maybe I can try explained hierarchical ? 
  chacl 
    ├──>  libacl.so.1 
    |        ├──>  libattr.so.1 
    |        |            └──> libc.so.6 
    |        |                    └──> ld-linux.so.2 
    |        └──>   libc.so.6 
    |                    └──> ld-linux.so.2
    └──>  libc.so.6 
               └──> ld-linux.so.2 
   However exist more dependencies, which not have path, but lddtree not show their. 
   ( dynamic , linux-vdso.so.1 , linux-gate.so.1 ) 
   more in link --> http://www.trilithium.com/johan/2005/08/linux-gate/ 


    $ perl ldd-recursive.pl /usr/bin/chacl 
    /usr/bin/chacl

linux-vdso.so.1

       	/lib64/libacl.so.1

linux-vdso.so.1 /lib64/libattr.so.1 linux-vdso.so.1 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 linux-vdso.so.1 /lib64/ld-linux-x86-64.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 linux-vdso.so.1 /lib64/ld-linux-x86-64.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 linux-vdso.so.1 /lib64/libattr.so.1 linux-vdso.so.1 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 linux-vdso.so.1 /lib64/ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2


Titbit

   Commands like readelf, objdump can show you shared library, 
   but do you know how check where is this lib in your system ? 


   You can use for example command find, but exist better way ... 
   For example I try find libacl.so.1 
    $ locate libacl.so.1
    /lib64/libacl.so.1
    /lib64/libacl.so.1.1.0
    $ ldconfig -p | grep libacl.so.1

libacl.so.1 (libc6,x86-64) => /lib64/libacl.so.1

How you can check which package provide this path  ?

    $ rpm -qf /lib64/libacl.so.1
    lib64acl1-2.2.51-1pclos2013


Wiki editing help --> https://www.mediawiki.org/wiki/Help:Formatting/pl