Es gibt eine ausführbare Datei, die ich auf einem Computer installieren möchte, den ich nicht neu kompilieren kann und die nicht als Paket erstellt wurde, und ich möchte die Bibliotheken herunterladen, die zum Ausführen erforderlich sind.
Teil des Ausgangs Im Folgenden finden Sie vom Laufen ldd
auf sie
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)
Gibt es ein Tool, das anhand dieser Informationen auswählen kann, welche Pakete heruntergeladen werden sollen, oder besser nur die aufgelisteten Bibliotheken und ihre Abhängigkeiten extrahieren soll, um die Festplattennutzung zu minimieren? Das System läuft auf einer kopflosen VM und das Programm wird über VNC angezeigt.
Obwohl ich vermute, dass ein vollwertiger Grafikdesktop die meisten benötigten Bibliotheken bereitstellt, möchte ich nur die erforderlichen Bibliotheken, ihre Abhängigkeiten und gerade genug des X Windows-Pakets herunterladen, um dies zu unterstützen.
quelle
Antworten:
Sie haben nicht gesagt, welches Betriebssystem Sie verwenden, daher gehe ich von Linux aus und verwende Debian als Beispiel. Die schnelle Antwort auf Ihre Frage lautet meines Wissens nein. Dies könnte jedoch eine nützliche Problemumgehung sein:
Dadurch wird die
ldd
Ausgabe analysiert und anschließend ausgeführtapt-cache
(durch das entsprechende für Ihr Betriebssystem ersetzt), um die Repositorys nach Paketen zu durchsuchen, deren Name und Beschreibung den ersten Teil des von zurückgegebenen Bibliotheksnamens enthaltenldd
.Dies wird nicht alle finden und für einige (wie
libc
) zu viele Ergebnisse liefern, aber es könnte hilfreich sein.@FaheemMitha wies darauf hin, dass
apt-file
dies ein besserer Weg sein könnte. Beispielsweise:Dadurch wird eine Liste der Paketnamen zurückgegeben, die die verknüpften Bibliotheken bereitstellen.
quelle
apt-file search
auf der eigentlichen Datei auf der rechten Seite des Pfeils könnte effektiver sein.apt-get install
alle und alle, die bereits installiert sind, werden ignoriert.Die Antwort von @ terdon ist großartig, aber es ist noch einfacher, dies zu tun, wenn es
dpkg-query
andersapt-file
als standardmäßig auf Debian-Systemen installiert ist.Dies erzeugt eine Liste von Paketen.
quelle
Am besten finden Sie ein Paket, das Ihre Distribution tatsächlich unterstützt. Aber wenn das bei Ihnen nicht funktioniert, kenne ich nur einen anderen Weg.
Führen Sie ldd so aus, wie Sie es getan haben, und installieren Sie diese Abhängigkeiten manuell.
Beispielsweise
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
Für mich würde es bedeuten, zu installieren
apt-get install libpango:i386
und zu beten, dass die Version in Debian instabil gut genug ist.Sie müssten jede Zeile von ldd, Google, durchgehen, in Ihren verfügbaren Repositories nachsehen und im Grunde genommen Glück haben. Dann installieren Sie sie einzeln. Bis das Programm tatsächlich läuft. ldd funktioniert jedoch nur für "einfache" Programme. Programme, die Plugins aufrufen oder beliebigen Code ausführen, sind insgesamt eine andere Sache. Für diese müssen Sie von der Konsole aus ausführen und die Abstürze / Fehler beheben, sobald sie auftreten.
Das heißt, eine nur binäre ausführbare Datei ist schrecklich schwer zu pflegen. Vielleicht möchten Sie etwas anderes verwenden. Wenn Ihre Distribution ein wenig voraus ist oder ein wenig hinter dem System, das diese ausführbare Datei erstellt hat, wird sie möglicherweise nie zum Laufen gebracht.
quelle