天天看點

linux下查找bin依賴的動态庫之ldd使用

ldd是什麼?

ldd如何使用?

ldd什麼場景使用?

本文盡量的把上面的上個問題解釋清楚,有了解不到位的地方還請多多指正。

ldd是什麼?

    ldd不是指令,是一個shell腳本,儲存路徑/usr/bin/ldd,可以直接cat或者vi檢視具體的實作。

    ldd的全稱是list dynamic dependencies,意思是,列出動态庫依賴關系,我們在編譯生成可執行檔案時,有靜态連結及動态連結庫檔案,ldd可以列出可執行檔案依賴的所有的動态庫。

ldd如何使用?

 我們可以通過幫助文檔,檢視ldd的使用方法。

Usage: ldd [OPTION]... FILE...
      --help              print this help and exit
      --version           print version information and exit
  -d, --data-relocs       process data relocations
  -r, --function-relocs   process data and function relocations
  -u, --unused            print unused direct dependencies
  -v, --verbose           print all information
           

  直接ldd FILE即可,比如:

[email protected]:/mnt/nfsroot/kevin$ ldd /bin/ls
        linux-vdso.so.1 =>  (0x00007ffe5cd79000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3100f1c000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f3100d14000)
        libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3100b0c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f310074b000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3100547000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f310113b000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f310032a000)
        libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3100125000)
           

  我們可以看到ls依賴如下清單中的動态庫。

ldd什麼場景使用?

  在實際linux開發與調試中, 我們有時候需要對可執行bin移植,如果是動态連結的庫,那麼直接把bin移植過去,是無法直接運作的,我們需要把對應的依賴的動态庫也一起移植,此時,ldd指令就很友善的幫助我們檢視,哪些依賴的動态庫需要一起移植

繼續閱讀