Чи залежить файл, який повідомляється як "не динамічний виконуваний файл" від ldd, від інших бібліотек?


9

Просто переконуюсь, що я маю це право - дзвоню

ldd /path/to/executable

і повертається "не динамічний виконуваний файл". Це означає, що це не залежить від інших бібліотек, правда? Якщо так, чи означає це, що його можна перенести в інший ящик Ubuntu, не турбуючись про залежності?

Відповіді:


3

Правильно, але є що врахувати.

На сторінці сторінки ldd:

ldd не працює у спільних бібліотеках.

ldd не працює з деякими надзвичайно старими програмами a.out, які були побудовані до того, як підтримка ldd була додана до версій компілятора. Якщо ви використовуєте ldd для однієї з цих програм, програма спробує запуститися з argc = 0, і результати будуть непередбачуваними.


3
Іншою причиною може бути те, що двійковий файл був розроблений для 32-бітної системи, але ви перевіряєте його на 64-бітній системі.
Фердинанд Прантл

@FerdinandPrantl Якщо він розроблений для 32-бітових, lddвсе ще друкує 32-бітові залежності.
Кальмарій

@Calmarius - це неправда, коли у вас немає основних 32-розрядних libgcc1. Щойно перевірено на свіжій установці сервера Ubuntu: Вам потрібно встановити libgcc1: i386, щоб зробити ldd щасливим для 32-бітних бінарних файлів.
falstaff

1

@Calmarius правильний, це трапляється, якщо ви вважаєте 32-бітовий exe, навіть без основних 32-бітових бібліотек.

Я намагаюся оновити свою систему (нова установка Ubuntu 16.04, з 12.04), мені потрібно встановити стару вигідну 32-бітну службу avserver, що вимагає ia32-libs(більше не доступна). Це означає і те, dpkgі apt-getвони нещасні (що б я не робив, це спонукає мене до цього apt-get -f install, і якщо я запускаю це, то наполягає, що я видалюю пакет послуг), і моя служба не запуститься.

Щоб довести, що це все до відсутності 32-бітових бібліотек, я встановив свою стару систему (Ubuntu 12.04, з ia32-libs32-бітовою бібліотекою) /sda2. Переконайтесь , що я можу /optвстановити (що містить 32-бітний двійковий) /sda2/opt, chroot /sda2а lddпотім запускати за призначенням

Щоб виправити це, я міг би вручну встановити всі залежні пакунки бібліотеки за допомогою: i386 (арка). Однак я вирішив, а не намагатися розібратися у тому, які мої залежності, я встановив вино (яке здебільшого є 32-бітним, і тому встановлює базові бібліотеки та завантажую більше, що мені не дуже потрібно, але я з цим все гаразд).

Щоб виправити dpkgі apt-get, я відредагував /var/lib/dpkg/status, знайшовши пакет для своєї послуги, і видалив ia32-libs. Зараз dpkgі apt-getраді

Що зроблено, lddрадісно повідомляє: - root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)


Установка вина - це дуже розумний трюк для отримання всіх необхідних 32-бітових бібліотек !!
psitae
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.