Skip to main content

Poiščite knjižnice v skupni rabi programa z ukazom "ldd"

Anonim

Uporabi ldd ukaz, da prikažete skupne knjižnice, ki jih zahteva kateri koli program - uporabno za delo, če manjka odvisnost. V ukazu so tudi manjkajoče funkcije in predmeti.

ldd Command Syntax

Upoštevajte pravilno sintakso za ukaz ldd, da se izognete napakam:

ldd OPTION … DATOTEK …

Uporabite eno ali več razpoložljivih ukaznih stikal ldd, vstavljenih v OPTION mesto v zgornjem ukazu:

--help | natisnite to pomoč in zapustite - verzija | informacije o tiskalni različici in izhod -d, -data-relocs | selitev podatkov procesa -r, -function-relocs | podatkov procesa in preseljevanja funkcij -u, -unused | natisnite neuporabljene neposredne odvisnosti -v, --verbose | natisnite vse informacije

Kako uporabljati ldd ukaz

Za več informacij o programu izvedite naslednji ukaz:

$ ldd -v / pot / do / program / izvedljiv

Izhod prikazuje podatke o različici, poti in naslove v knjižnicah v skupni rabi, na primer:

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

Če datoteka SO SO sploh ne obstaja, lahko najdete manjkajoče knjižnice z naslednjim ukazom:

$ ldd -d pot / v / program

Rezultat je podoben naslednjemu:

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

Nikoli ne zaženite ukaza ldd zoper nezaupen program, ker ga ldd dejansko lahko izvede. Namesto tega uporabite varnejšo alternativo, ki prikazuje samo neposredne odvisnosti in ne celotno drevo odvisnosti:

$ objdump -p / path / do / program | grep POTREBNO

Kako najti pot do aplikacije

Določiti morate celotno pot do aplikacije, če želite, da bi našli svoje odvisnosti z ldd, kar lahko storite na več načinov.

Tako na primer najdete pot do Firefoxa:

$ našli / -name firefox

Problem z ukazom find pa je, da ne bo samo seznam izvršljiv, temveč povsod, kjer se Firefox nahaja, na primer:

  • /etc/skel/.mozilla/firefox
  • / home // cache / mozilla / firefox
  • /home//.mozilla/firefox
  • / usr / bin / Firefox
  • / usr / lib / Firefox
  • / usr / lib / Firefox / Firefox

Ta pristop je malo presežen in morda boste morali uporabiti ukaz sudo za povišanje privilegijev, drugače boste verjetno dobili veliko napak, ki jih je dovoljeno dovoliti.

Namesto tega je namesto ukaza whereis veliko lažje najti pot aplikacije:

$ whereis firefox

Tokrat bo izhod lahko videti takole:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Vse kar morate storiti, da najdete skupne knjižnice za Firefox je vnesite ta ukaz:

$ ldd / usr / bin / firefox

Izhod iz ukaza bo nekaj takega:

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 je ime knjižnice, številko hexa pa je naslov, kamor bo knjižnica naložena v pomnilnik.

V mnogih drugih vrsticah boste opazili, da simbol => sledi pot. To je pot do fizične binarnosti; številka hexa je naslov, kjer bo knjižnica naložena.