2013-02-25 230 views
8

我有一個二進制文件,其中ldd顯示意外的依賴項和libicuuc(來自「icu」)。ldd是否也顯示依賴關係的依賴關係?

#ldd A 
[...] 
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007faaf9722000) 
libicuuc.so.49 => /usr/lib64/libicuuc.so.49 (0x00007faaf5689000) 

由於這一系統的libxml取決於動態的libicuuc,這是有道理的,ldd的enventually最終找到它,但它預計libicuuc也出現在LDD輸出阿?是否有一些命令僅檢索鏈接爲依賴關係的庫?

+1

是的,這是如何工作。見例如[這裏](http://stackoverflow.com/questions/1488527/hierarchical-ldd1)瞭解更多信息。 – 2013-02-25 10:28:59

回答

15

ldd顯示啓動應用程序或加載共享庫時需要加載的所有庫。

readelf -d只顯示二進制的直接依賴關係。

$ readelf -d /opt/google/chrome/chrome | grep NEEDED 
0x0000000000000001 (NEEDED)    Shared library: [libX11.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libXrandr.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libXrender.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libXss.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libXext.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [librt.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libdl.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libgobject-2.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libgthread-2.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libglib-2.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libgtk-x11-2.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libgdk-x11-2.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libatk-1.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libgdk_pixbuf-2.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libpangocairo-1.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libcairo.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libpango-1.0.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libfreetype.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libfontconfig.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libnss3.so] 
0x0000000000000001 (NEEDED)    Shared library: [libnssutil3.so] 
0x0000000000000001 (NEEDED)    Shared library: [libsmime3.so] 
0x0000000000000001 (NEEDED)    Shared library: [libplc4.so] 
0x0000000000000001 (NEEDED)    Shared library: [libnspr4.so] 
0x0000000000000001 (NEEDED)    Shared library: [libpthread.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libgconf-2.so.4] 
0x0000000000000001 (NEEDED)    Shared library: [libdbus-1.so.3] 
0x0000000000000001 (NEEDED)    Shared library: [libXcomposite.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libasound.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libXfixes.so.3] 
0x0000000000000001 (NEEDED)    Shared library: [libcups.so.2] 
0x0000000000000001 (NEEDED)    Shared library: [libgcrypt.so.11] 
0x0000000000000001 (NEEDED)    Shared library: [libbz2.so.1.0] 
0x0000000000000001 (NEEDED)    Shared library: [libexpat.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libudev.so.0] 
0x0000000000000001 (NEEDED)    Shared library: [libstdc++.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libm.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [libgcc_s.so.1] 
0x0000000000000001 (NEEDED)    Shared library: [libc.so.6] 
0x0000000000000001 (NEEDED)    Shared library: [ld-linux-x86-64.so.2] 

$ ldd /opt/google/chrome/chrome 
    linux-vdso.so.1 => (0x00007fff9d3ff000) 
    libX11.so.6 => /lib64/libX11.so.6 (0x00007f93186dc000) 
    libXrandr.so.2 => /lib64/libXrandr.so.2 (0x00007f93184d3000) 
    libXrender.so.1 => /lib64/libXrender.so.1 (0x00007f93182c9000) 
    libXss.so.1 => /lib64/libXss.so.1 (0x00007f93180c5000) 
    libXext.so.6 => /lib64/libXext.so.6 (0x00007f9317eb2000) 
    librt.so.1 => /lib64/librt.so.1 (0x00007f9317caa000) 
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f9317aa6000) 
    libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x00007f9317858000) 
    libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x00007f9317656000) 
    libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x00007f9317336000) 
    libgtk-x11-2.0.so.0 => /lib64/libgtk-x11-2.0.so.0 (0x00007f9316cbf000) 
    libgdk-x11-2.0.so.0 => /lib64/libgdk-x11-2.0.so.0 (0x00007f9316a00000) 
    libatk-1.0.so.0 => /lib64/libatk-1.0.so.0 (0x00007f93167de000) 
    libgdk_pixbuf-2.0.so.0 => /lib64/libgdk_pixbuf-2.0.so.0 (0x00007f93165bb000) 
    libpangocairo-1.0.so.0 => /lib64/libpangocairo-1.0.so.0 (0x00007f93163ae000) 
    libcairo.so.2 => /lib64/libcairo.so.2 (0x00007f9316103000) 
    libpango-1.0.so.0 => /lib64/libpango-1.0.so.0 (0x00007f9315eb7000) 
    libfreetype.so.6 => /usr/lib64/freetype-freeworld/libfreetype.so.6 (0x00007f9315c15000) 
    libfontconfig.so.1 => /lib64/libfontconfig.so.1 (0x00007f93159e0000) 
    libnss3.so => /lib64/libnss3.so (0x00007f93156a4000) 
    libnssutil3.so => /lib64/libnssutil3.so (0x00007f9315479000) 
    libsmime3.so => /lib64/libsmime3.so (0x00007f931524c000) 
    libplc4.so => /lib64/libplc4.so (0x00007f9315046000) 
    libnspr4.so => /lib64/libnspr4.so (0x00007f9314e09000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9314bed000) 
    libgconf-2.so.4 => /lib64/libgconf-2.so.4 (0x00007f93149bc000) 
    libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f9314778000) 
    libXcomposite.so.1 => /lib64/libXcomposite.so.1 (0x00007f9314575000) 
    libasound.so.2 => /lib64/libasound.so.2 (0x00007f9314294000) 
    libXfixes.so.3 => /lib64/libXfixes.so.3 (0x00007f931408e000) 
    libcups.so.2 => /lib64/libcups.so.2 (0x00007f9313e33000) 
    libgcrypt.so.11 => /lib64/libgcrypt.so.11 (0x00007f9313bba000) 
    libbz2.so.1.0 => not found 
    libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f9313991000) 
    libudev.so.0 => /lib64/libudev.so.0 (0x00007f9313782000) 
    libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f931347f000) 
    libm.so.6 => /lib64/libm.so.6 (0x00007f9313184000) 
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f9312f6e000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f9312bb7000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003c7a000000) 
    libxcb.so.1 => /lib64/libxcb.so.1 (0x00007f9312999000) 
    libffi.so.5 => /lib64/libffi.so.5 (0x00007f9312790000) 
    libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0 (0x00007f931258c000) 
    libgio-2.0.so.0 => /lib64/libgio-2.0.so.0 (0x00007f931223f000) 
    libpangoft2-1.0.so.0 => /lib64/libpangoft2-1.0.so.0 (0x00007f9312012000) 
    libXinerama.so.1 => /lib64/libXinerama.so.1 (0x00007f9311e0f000) 
    libXi.so.6 => /lib64/libXi.so.6 (0x00007f9311c00000) 
    libXcursor.so.1 => /lib64/libXcursor.so.1 (0x00007f93119f4000) 
    libXdamage.so.1 => /lib64/libXdamage.so.1 (0x00007f93117f1000) 
    libpng15.so.15 => /lib64/libpng15.so.15 (0x00007f93115c7000) 
    libpixman-1.so.0 => /lib64/libpixman-1.so.0 (0x00007f9311340000) 
    libz.so.1 => /lib64/libz.so.1 (0x00007f9311129000) 
    libplds4.so => /lib64/libplds4.so (0x00007f9310f24000) 
    libdbus-glib-1.so.2 => /lib64/libdbus-glib-1.so.2 (0x00007f9310cfd000) 
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f9310ab8000) 
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f93107d3000) 
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f93105a8000) 
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f93103a3000) 
    libgnutls.so.26 => /lib64/libgnutls.so.26 (0x00007f93100eb000) 
    libgpg-error.so.0 => /lib64/libgpg-error.so.0 (0x00007f930fee7000) 
    libavahi-common.so.3 => /lib64/libavahi-common.so.3 (0x00007f930fcd9000) 
    libavahi-client.so.3 => /lib64/libavahi-client.so.3 (0x00007f930fac8000) 
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f930f891000) 
    libXau.so.6 => /lib64/libXau.so.6 (0x00007f930f68c000) 
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f930f46b000) 
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f930f251000) 
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f930f046000) 
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f930ee42000) 
    libtasn1.so.3 => /lib64/libtasn1.so.3 (0x00007f930ec31000) 
    libp11-kit.so.0 => /lib64/libp11-kit.so.0 (0x00007f930ea1e000) 
    libfreebl3.so => /lib64/libfreebl3.so (0x00007f930e7b3000) 

有一些命令只檢索鏈接作爲依賴的依賴庫?

您可以設置lddreadelf -d輸出的差值。

+0

太好了。非常感謝。 – Thomas 2013-02-25 10:46:12

+1

objdump -T也有幫助 – socketpair 2015-05-23 20:29:17

+0

對於所有的複製貓:**所有可執行文件在目錄中的直接依賴列表**:'{for $ in $(find DIRECTORY -type f -executable -print);做readelf -d $我2>/dev/null | grep需要| awk'{print $ 5}'| sed「s/\ [// g」| sed「s/\] // g」;完成; } |排序-u' – meisterplanlos 2017-12-11 11:00:46