En regardant https://askubuntu.com/a/207750/23678 comment l'auteur a-t-il su quelle dépendance il manquait? Existe-t-il un moyen générique de rechercher la liste des dépendances d’un exécutable et celles qui manquent?
UPDATE: Je viens de remarquer que j'ai remarqué que https://stackoverflow.com/a/9082947/14731 utilisé
readelf -l [exécutable]
Est-ce la meilleure approche?
Dans la question liée à AskUbuntu, l'auteur savait quelle dépendance était manquante car il essayait d'installer une application 32 bits sur une installation Ubuntu 64 bits et, pour le citer:
certaines bibliothèques 32 bits sont absentes dans Ubuntu 64 bits.
Il avait donc besoin de les installer.
Cependant, pour répondre à vos questions:
Oui, il existe un moyen de détecter les dépendances manquantes ou d’en obtenir une liste.
Le système de gestion de paquetsapt
, utilisé dans les distributions Linux basées sur Debian, est un système astucieux dans lequel il détectera automatiquement si les paquetages actuellement installés ont des dépendances manquantes (même si vous les avez installés avec dpkg
et non apt-get
). Supposons que vous ayez installé un paquet, sans ses dépendances, puis la prochaine fois que vous exécuterez apt-get upgrade
, vous obtiendrez une erreur similaire à celle-ci:
The following packages have unmet dependencies:
package1 : Depends: package2 (>= 1.8) but 1.7.5-1ubuntu1 is to be installed
Indiquer que package1
dépend de package2
, et que package2
(à savoir, la version la plus récente dans cet exemple) n'est pas installé. Habituellement, pour résoudre ce problème, vous exécutez la commande Sudo apt-get install -f
, qui indique à apt-get
d'essayer de récupérer et d'installer les packages manquants.
La suite apt
, ainsi que dpkg
, fournit un moyen astucieux de lister les dépendances d'un paquet.
Pour apt
, la commande est la suivante:
apt-cache depends <packagename>
Cela vérifiera le paquet dans les référentiels et listera les dépendances, ainsi que les paquets "suggérés". Si vous voulez vraiment filtrer les dépendances seules, vous pouvez filtrer la sortie en procédant comme suit: apt-cache depends <packagename> | grep Depends
. Voici un exemple de sortie:
alaa @ aa-lu: ~ $ apt-cache dépend vlc vlc Dépend de: fonts-freefont-ttf Dépend de: vlc-nox | Dépend de: libavutil51 Dépend de: libxpm4 Dépend de: zlib1g PreDepends: dpkg Suggère: videolan-doc Recommande: vlc-plugin-notify Recommande: xdg-utils Breaks: vlc-data Breaks: vlc-nox Remplace: vlc-data Remplace: vlc-nox
La production est réduite pour des raisons de brièveté.
Pour dpkg
, la commande permettant de l'exécuter sur un fichier local est la suivante:
dpkg -I file.deb | grep Depends
dpkg -I file.deb
renvoie de nombreuses informations sur ce fichier .deb
. Nous le filtrons donc pour ne regarder que les dépendances.
Puisque apt
n'est en réalité qu'un front-end pour dpkg , ces deux commandes font essentiellement la même chose, elles vont dans le fichier .deb
de l'application pour le savoir. quelles dépendances il a besoin, sauf que apt-cache
regarde dans les référentiels. Ces "dépendances" sont listées à l'intérieur du fichier .deb
en tant que métadonnées. C'est pourquoi, même si vous avez téléchargé et installé manuellement une application ( est généralement un fichier .deb
. Vous devez donc l'installer à l'aide de dpkg
et non pas apt
) à partir d'un site Web (par exemple, le navigateur Chrome de Google à partir du site Web de Google). ), apt
continuera à découvrir l'existence de dépendances manquantes en analysant les packages installés.
Je ne suis pas très au courant de tous ces problèmes d'architecture d'ordinateur, mais dans le cas de Java dans cette question, il s'agit en réalité d'architecture 32 et 64 bits. Pour citer la réponse de stackoverflow:
Vous utilisez un système 64 bits sans environnement d'exécution 32 bits.
Cette bibliothèque spécifique, qui devait être installée, n'était pas incluse dans la partie "Dépend" du package d'installation, car il installait une application 32 bits sur un système 64 bits. Donc, un dépannage supplémentaire était nécessaire pour trouver le coupable, d'où l'utilisation de readelf
et ldd
. Cependant, celles-ci sont probablement plus spécifiques aux bibliothèques, et rappelez-vous que les "dépendances" ne sont pas toujours des "bibliothèques", mais pourraient être d'autres applications. Donc " Est-ce la meilleure approche? ", j'en doute; Je pense que ce n’est que mieux si un dépannage supplémentaire est nécessaire.