GNU/Linux >> Linux の 問題 >  >> Linux

Linux で実行可能ファイルが使用するすべての共有ライブラリを表示するには?

<オール>
  • ldd を使用 各実行可能ファイルの共有ライブラリを一覧表示します。
  • 出力をクリーンアップする
  • ソート、カウントの計算、カウントによるソート
  • 「/bin」ディレクトリ内のすべての実行可能ファイルの答えを見つけるには:

    find /bin -type f -perm /a+x -exec ldd {} \; \
    | grep so \
    | sed -e '/^[^\t]/ d' \
    | sed -e 's/\t//' \
    | sed -e 's/.*=..//' \
    | sed -e 's/ (0.*)//' \
    | sort \
    | uniq -c \
    | sort -n
    

    すべてのディレクトリを検索するには、上記の「/bin」を「/」に変更してください。

    出力 (/bin ディレクトリのみ) は次のようになります:

      1 /lib64/libexpat.so.0
      1 /lib64/libgcc_s.so.1
      1 /lib64/libnsl.so.1
      1 /lib64/libpcre.so.0
      1 /lib64/libproc-3.2.7.so
      1 /usr/lib64/libbeecrypt.so.6
      1 /usr/lib64/libbz2.so.1
      1 /usr/lib64/libelf.so.1
      1 /usr/lib64/libpopt.so.0
      1 /usr/lib64/librpm-4.4.so
      1 /usr/lib64/librpmdb-4.4.so
      1 /usr/lib64/librpmio-4.4.so
      1 /usr/lib64/libsqlite3.so.0
      1 /usr/lib64/libstdc++.so.6
      1 /usr/lib64/libz.so.1
      2 /lib64/libasound.so.2
      2 /lib64/libblkid.so.1
      2 /lib64/libdevmapper.so.1.02
      2 /lib64/libpam_misc.so.0
      2 /lib64/libpam.so.0
      2 /lib64/libuuid.so.1
      3 /lib64/libaudit.so.0
      3 /lib64/libcrypt.so.1
      3 /lib64/libdbus-1.so.3
      4 /lib64/libresolv.so.2
      4 /lib64/libtermcap.so.2
      5 /lib64/libacl.so.1
      5 /lib64/libattr.so.1
      5 /lib64/libcap.so.1
      6 /lib64/librt.so.1
      7 /lib64/libm.so.6
      9 /lib64/libpthread.so.0
     13 /lib64/libselinux.so.1
     13 /lib64/libsepol.so.1
     22 /lib64/libdl.so.2
     83 /lib64/ld-linux-x86-64.so.2
     83 /lib64/libc.so.6
    

    編集 - 「grep -P」を削除


    バイナリが使用するライブラリを知るには、ldd を使用してください

    ldd path/to/the/tool
    

    システム全体の内訳に到達するには、小さなシェル スクリプトを作成する必要があります。


    ARM ツールチェーンに ldd がなかったので、objdump を使用しました:

    $(CROSS_COMPILE)objdump -p

    例:

    objdump -p /usr/bin/python:
    
    Dynamic Section:
      NEEDED               libpthread.so.0
      NEEDED               libdl.so.2
      NEEDED               libutil.so.1
      NEEDED               libssl.so.1.0.0
      NEEDED               libcrypto.so.1.0.0
      NEEDED               libz.so.1
      NEEDED               libm.so.6
      NEEDED               libc.so.6
      INIT                 0x0000000000416a98
      FINI                 0x000000000053c058
      GNU_HASH             0x0000000000400298
      STRTAB               0x000000000040c858
      SYMTAB               0x0000000000402aa8
      STRSZ                0x0000000000006cdb
      SYMENT               0x0000000000000018
      DEBUG                0x0000000000000000
      PLTGOT               0x0000000000832fe8
      PLTRELSZ             0x0000000000002688
      PLTREL               0x0000000000000007
      JMPREL               0x0000000000414410
      RELA                 0x0000000000414398
      RELASZ               0x0000000000000078
      RELAENT              0x0000000000000018
      VERNEED              0x0000000000414258
      VERNEEDNUM           0x0000000000000008
      VERSYM               0x0000000000413534
    

    Linux の場合:

    lsof -P -T -p Application_PID
    

    これは ldd よりもうまく機能します 実行可能ファイルがデフォルト以外のローダーを使用する場合


    Linux
    1. Linuxですべてのユーザーの共有ディレクトリを作成する方法

    2. Linux グループ内のすべてのユーザーを一覧表示する方法は?

    3. Linux で googleTest を共有ライブラリとして設定する方法

    1. Linuxで動的ライブラリと静的ライブラリを処理する方法

    2. LinuxですべてのSudoユーザーを見つける方法

    3. Linux 共有ライブラリの紹介 (共有ライブラリの作成方法)

    1. Linux で共有ライブラリを初期化する方法

    2. Linux 共有ライブラリのストリッピング

    3. Linux で共有ライブラリのバージョン管理を行う方法は?