Skip to main content

Намерете споделените библиотеки на програмата с командата "ldd"

Използване на командата Filter (Юни 2026)

Използване на командата Filter (Юни 2026)
Anonim

Използвай ДЛД команда за показване на споделените библиотеки, изисквани от която и да е програма - полезна за обработка при липса на зависимост. Командата също така посочва липсващи функции и обекти.

ldd команден синтаксис

Наблюдавайте правилния синтаксис за командата ldd, за да избегнете грешки:

ldd ОПЦИЯ … ФАЙЛ …

Използвайте един или повече от наличните ключове за командата ldd, поставени в ВАРИАНТ място в горната команда:

--help | отпечатайте тази помощ и излезте - версия отпечатване на информация за версиите и излизане -d, --data-relocs | обработка на данни -r, -function-relocs | обработка на данни и функционални премествания -u, --unused | отпечатване на неизползвани директни зависимости -v, --verbose | отпечатайте цялата информация

Как да използвате командата ldd

Изпълнете следната команда, за да получите повече информация за дадена програма:

$ ldd -v / path / to / програма / изпълним

Резултатът показва информация за версията, както и пътищата и адресите към споделените библиотеки, както следва:

$ 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 => ​​не е foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) /lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)

Никога не стартирайте командата ldd срещу ненадеждна програма, защото LDD може да я изпълни. Вместо това използвайте по-безопасна алтернатива, която показва само директните зависимости, а не цялото дърво на зависимост:

$ objdump -p / path / to / програма grep Нужда

Как да намерите пътя към приложението

Трябва да предоставите пълния път към приложението, ако искате да намерите неговите зависимости с ldd, което можете да направите по няколко начина.

Например, така ще откриете пътя към Firefox:

$ find / -name firefox

Проблемът с командата за намиране обаче е, че той не само ще покаже изпълнимия файл, но и навсякъде, където се намира Firefox, както следва:

  • /etc/skel/.mozilla/firefox
  • / Дома // кеш / Mozilla / Firefox
  • /home//.mozilla/firefox
  • / ЮЕсАр / хамбар / Firefox
  • / ЮЕсАр / ИЪ / Firefox
  • / ЮЕсАр / ИЪ / Firefox / Firefox

Този подход е малко преувеличен и може да се наложи да използвате командата sudo, за да издигнете вашите привилегии, в противен случай вероятно ще получите много грешки, отказани от разрешение.

Вместо това е много по-лесно да използвате командата whereis, за да намерите пътя на приложението:

$ whereis firefox

Този път изходът може да изглежда така:

/ ЮЕсАр / хамбар / Firefox

/ И т.н. / огън

/ ЮЕсАр / ИЪ / Firefox

Всичко, което трябва да направите сега, за да намерите споделените библиотеки за 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 е името на библиотеката и шестнадесетичното число е адресът, в който библиотеката ще бъде заредена в паметта.

Ще забележите на много от другите редове, че символът => е последван от път. Това е пътят до физическото двоично устройство; шестнадесетичния номер е адресът, в който ще бъде заредена библиотеката.