Знайдіть спільні бібліотеки програми за допомогою команди ldd

Використовувати ldd команду, щоб показати спільні бібліотеки, необхідні будь-якій програмі. Команда ldd корисна для роботи, коли відсутня залежність. The команда також перераховує відсутні функції та об'єкти.

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

Дотримуйтесь належного синтаксису для команди ldd, щоб уникнути помилок:

ldd [ВАРІАНТ]... ФАЙЛ...

Використовуйте один або кілька доступних командних перемикачів ldd, вставлених у місце [OPTION] у команді вище:

  • --help: роздрукувати цю довідку та вийти.
  • --version: роздрукувати інформацію про версію та вийти.
  • -d, --data-relocs: обробляти переміщення даних.
  • -r, --function-relocs: переміщення даних процесу та функцій.
  • -u, --unused: надрукувати невикористані прямі залежності.
  • -v, --verbose: надрукувати всю інформацію.

Як використовувати команду ldd

Виконайте таку команду, щоб отримати більше інформації про програму:

ldd -v /шлях/до/програми/виконуваного файлу

Вихідні дані показують інформацію про версію, а також шляхи та адреси до спільних бібліотек, наприклад:

libshared.so

linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
Команда Linux ldd

Якщо файл SO взагалі не існує, ви можете знайти відсутні бібліотеки за допомогою такої команди:

ldd -d шлях/до/програми

Вихід подібний до наступного:

linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => ​​не знайденоlibc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
Відсутня команда Linux ldd

Ніколи не запускайте команду ldd проти ненадійної програми, оскільки команда ldd може її виконати. Замість цього використовуйте більш безпечну альтернативу, яка показує лише прямі залежності, а не все дерево залежностей:

objdump -p /шлях/до/програми | grep ПОТРІБНА
Альтернатива Linux objdump ldd

Як знайти шлях до програми

Ви повинні вказати повний шлях до програми, якщо ви хочете знайти її залежності за допомогою ldd, що ви можете зробити кількома способами.

Наприклад, це як знайти шлях до Firefox:

знайти / -ім'я firefox

Проблема з команда знайти, однак, він перераховує виконуваний файл і всюди, де знаходиться Firefox, ось так:

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

Цей підхід є дещо надмірним, і вам, можливо, доведеться скористатися команда sudo щоб підвищити свої привілеї, інакше ви, ймовірно, отримаєте помилки, у яких відмовлено в дозволі.

Натомість простіше використовувати де команда щоб знайти шлях до програми:

де firefox

Цього разу результат може виглядати так:

/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Linux whereis команда

Потім, щоб знайти спільні бібліотеки для 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 – це ім’я бібліотеки, а шістнадцятковий номер – це адреса, куди бібліотека завантажується в пам’ять.

На багатьох рядках => за символом йде шлях. Це шлях до фізичної бінарності. Шістнадцятковий номер – це адреса, на яку завантажується бібліотека.