GNU/Linux >> Znalost Linux >  >> Linux

Najít knihovny, se kterými byl binární soubor spojen

Tryldd binary-exec

Příklad:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

Chcete-li najít, co přímo potřebuje:

readelf -d APP | grep NEEDED

ldd jak je uvedeno jinde, zobrazí všechny přímé a nepřímé knihovny - vše, co potřebuje za běhu. Toto nemusí být úplný seznam, protože věci můžete dynamicky otevírat pomocí dlopen(), ale to by mělo fungovat 99% času.

ld a libtool se používají při kompilaci/propojení. Jakmile máte aplikaci, nejsou užitečné.

UPRAVIT Podle pozdějších odpovědí vidím, že jste se ptali na OSX, ale ke své odpovědi o nástrojích Linuxu chci přidat:

Jednu věc jsem zapomněl zmínit, před docela chvílí; ptal jste se na verze. Ani ldd ani readelf odpoví na otázku „jaká verze“. Řeknou vám název souboru knihovny, kterou hledáte, a konvence pojmenování může mít nějaké informace o verzi, ale nic to nevynucuje. Symboly mohou být verzovány a museli byste mít mnohem nižší úroveň s nm vidět tyto,


Dalším způsobem by bylo použití objdump.

objdump -x "binární" | grep POTŘEBUJEME

To ukazuje všechny potřebné závislosti pouze pro tento binární soubor. Velmi užitečné.


Linux
  1. Oprava binárního kódu pomocí Dd?

  2. Linuxové 3D grafické knihovny?

  3. Linux – Ldd nenajde cestu, jak přidat?

  1. Binární kompatibilita distribuce Linuxu

  2. Používají (staticky propojené) knihovny DLL jinou haldu než hlavní program?

  3. vypsat/najít všechny běžné soubory ve všech podadresářích s výjimkou binárních souborů

  1. Jak zjistit zatížení spustitelných souborů dynamických knihoven při spuštění?

  2. Linux – Jak otestovat, zda byl binární soubor Linuxu zkompilován jako kód nezávislý na pozici?

  3. Zjistěte, zda je knihovna v cestě