Знайдіть спільні бібліотеки програми за допомогою команди 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)

Якщо файл 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)

Ніколи не запускайте команду ldd проти ненадійної програми, оскільки команда ldd може її виконати. Замість цього використовуйте більш безпечну альтернативу, яка показує лише прямі залежності, а не все дерево залежностей:
objdump -p /шлях/до/програми | grep ПОТРІБНА

Як знайти шлях до програми
Ви повинні вказати повний шлях до програми, якщо ви хочете знайти її залежності за допомогою 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

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