Istnieje plik wykonywalny, który chcę zainstalować na komputerze, którego nie mogę ponownie skompilować, a który nie został zbudowany jako pakiet, i chcę pobrać biblioteki wymagane do ich uruchomienia.
Poniżej znajduje się część wyniku działania ldd
na nim
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)
Czy istnieje narzędzie, które może wykorzystać te informacje do wybrania pakietów, które należy pobrać, lub jeszcze lepiej wyodrębnić tylko wymienione biblioteki i ich zależności, aby zminimalizować użycie dysku? System działa na bezgłowej maszynie wirtualnej, a program będzie wyświetlany za pośrednictwem VNC.
Chociaż podejrzewam, że pulpit z pełną grafiką dostarczy większość potrzebnych bibliotek, chcę pobrać tylko wymagane biblioteki, ich zależności i tylko tyle pakietu X Windows, aby go obsługiwać.
źródło
Odpowiedzi:
Nie powiedziałeś, jakiego systemu operacyjnego używasz, więc założę Linuxa i użyję Debiana jako przykładu. O ile wiem, szybka odpowiedź na twoje pytanie jest nie. Może to być przydatne obejście:
Spowoduje to przeanalizowanie danych
ldd
wyjściowych, a następnie uruchomienieapt-cache
(zastąp to odpowiednikiem dla twojego systemu operacyjnego), aby przeszukać repozytoria w poszukiwaniu pakietów, których nazwa i opis zawiera pierwszą część nazwy biblioteki zwróconej przezldd
.To nie znajdzie wszystkich i da zbyt wiele wyników dla niektórych (jak
libc
), ale może być pomocne.@FaheemMitha wskazał, że
apt-file
może to być lepszy sposób. Na przykład:To zwróci listę nazw pakietów udostępniających połączone biblioteki.
źródło
apt-file search
na rzeczywistym pliku po prawej stronie strzałki może być bardziej skuteczny.apt-get install
wszystkie z nich i wszystkie już zainstalowane zostaną zignorowane.Odpowiedź @ terdona jest świetna, ale jeszcze łatwiej jest to zrobić przy użyciu, w
dpkg-query
przeciwieństwieapt-file
do domyślnie instalowanego w systemach Debian.To tworzy listę pakietów.
źródło
Najlepiej jest znaleźć pakiet, który faktycznie obsługuje Twoją dystrybucję. Ale jeśli to ci nie pomoże, to znam tylko jeden inny sposób.
Uruchom ldd, jak masz, a następnie ręcznie zainstaluj te zależności.
Na przykład
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
Dla mnie oznaczałoby to zainstalowanie
apt-get install libpango:i386
i modlenie się, aby wersja niestabilna w Debianie była wystarczająco dobra.Musisz przejrzeć każdą linię ldd, Google, zajrzeć do dostępnych repozytoriów i po prostu mieć szczęście. Następnie zainstaluj je jeden po drugim. Do czasu uruchomienia programu. ldd działa jednak tylko w przypadku „prostych” programów. Programy wywołujące wtyczki lub uruchamiające dowolny kod to zupełnie inna sprawa. W przypadku tych musisz uruchomić z konsoli i naprawić awarie / błędy, gdy się zdarzają.
To powiedziawszy, binarny plik wykonywalny jest strasznie trudny do utrzymania. Możesz rozważyć użycie czegoś innego. Jeśli twoja dystrybucja jest trochę przed tobą, lub trochę za systemem, który zbudował ten plik wykonywalny, możesz go nigdy nie uruchomić.
źródło