在Linux中使用“ldd”命令

ldd命令可用於向您顯示任何給定程序所需的共享庫。

這對解決何時存在缺失依賴關係以及可用於列出缺少的函數和對像很有用。

ldd命令語法

這是使用ldd命令時的正確語法

ldd [選項] ...文件...

以下是可用的ldd命令開關,可將其插入上述命令的[OPTION]點中:

--help打印此幫助並退出--version打印版本信息並退出-d,--data-relocs進程數據重定位-r,--function-relocs進程數據和函數重定位-u,--unused打印未使用的直接依賴關係-v,--verbose打印所有信息

如何使用ldd命令

您可以使用以下命令從任何ldd命令獲取更多信息:

ldd -v / path / to / program / executable

輸出顯示版本信息以及共享庫的路徑和地址,如下所示:

ldd libshared.so linux-vdso.so.1 =>(0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2(0x00007ff1dfafe000)

如果SO文件根本不存在,則可以使用以下命令找到缺失的庫:

ldd -d路徑/到/程序

輸出與以下類似:

linux-vdso.so.1(0x00007ffc2936b000)/home/gary/demo/garylib.so => not foundlibc.so.6 => usr / lib / libc.so.6(0x00007fd0c6259000)/ lib64 / ld-linux-x86 -64.so.2(0x00007fd0c65fd000)

重要信息:不要針對不受信任的程序運行ldd命令,因為該命令可能實際執行該命令。 這是一個更安全的方法,只顯示直接依賴關係,而不顯示整個依賴關係樹: objdump -p / path / to / program | grep需要

如何找到應用程序的路徑

如果要使用ldd查找依賴關係,則必須提供應用程序的完整路徑,您可以採用多種方法。

例如,這就是你如何找到Firefox的路徑:

找到/ -name firefox

然而find命令的問題在於,它不僅會列出可執行文件,而且還會列出Firefox所在的位置,如下所示:

這種方法有點矯枉過正,你可能需要使用sudo命令來提升你的權限,否則你很可能會獲得許多被拒絕的權限錯誤。

使用whereis命令來查找應用程序的路徑要容易得多:

其中firefox

這次輸出可能如下所示:

在/ usr / bin中/火狐

在/ etc /火狐

/ usr / lib中/火狐

現在您只需鍵入以下命令即可找到用於Firefox的共享庫:

ldd / usr / bin / firefox

命令的輸出將如下所示:

linux-vdso.so.1(0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0(0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2(0x00007feb98f76000)
libstdc ++。so.6 => /usr/lib/libstdc++.so.6(0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6(0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1(0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6(0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2(0x00007feb99397000)

linux-vdso.so.1是庫的名稱,十六進制數是庫在內存中的加載地址。

您會注意到許多其他行上=>符號後面跟著一條路徑。 這是物理二進製文件的路徑; 十六進制數是庫將被加載的地址。