Manpages

NOM

dpkg−shlibdeps − générateur de variables de substitution de dépendances pour bibliothèques partagées

SYNOPSIS

dpkg−shlibdeps [option...] [−e]exécutable [option...]

DESCRIPTION

dpkg−shlibdeps calcule, pour les exécutables indiqués dans ses paramètres, les dépendances envers les bibliothèques partagées. Ces dépendances sont ajoutées au fichier de variables de substitution debian/substvars sous la forme shlibs:dependencyfielddependencyfield est le nom du champ de dépendance. Toute autre variable après shlibs: est supprimée du fichier.

dpkg−shlibdeps a deux sources possibles pour créer les informations concernant les dépendances. Soit les fichiers symbols, soit les fichiers shlibs. Pour chaque fichier binaire qu’il analyse, dpkg−shlibdeps recherche la liste des bibliothèques partagées qui lui sont liées. Puis, pour chacune d’elles il analyse soit le fichier symbols, soit le fichier shlibs (si le premier n’existe pas ou si debian/shlibs.local contient les dépendances appropriées). Ces deux fichiers sont sensés être fournis par le paquet de la bibliothèque et disponibles dans /var/lib/dpkg/info/paquet.symbols ou /var/lib/dpkg/info/paquet.shlibs. Le nom du paquet est trouvé en deux étapes : en cherchant les fichiers de la bibliothèque sur le système, dans le répertoire que ld.so utiliserait, puis un utilisant dpkg −S fichier−bibliothèque pour trouver le paquet qui fournit cette bibliothèque.

Fichiers symboles
Les fichiers symboles contiennent des informations de dépendances plus fines en fournissant les dépendances minimales pour chaque symbole de la bibliothèque exportée. Le script essaie de trouver un fichier de symboles associé à un paquet de bibliothèque dans les emplacements suivants (le premier trouvé est utilisé) :
debian/*/DEBIAN/symbols

L’information des bibliothèques partagées générée par l’actuel processus de construction qui invoque aussi dpkg−shlibdeps. Elles sont générées par dpkg−gensymbols(1) et ne sont utilisées que si la bibliothèque se trouve dans l’arbre de construction d’un paquet. Le fichier des symboles qui construit l’arbre s’appuie sur les fichiers de symboles d’autres paquets binaires.

/etc/dpkg/symbols/paquet.symbols.architecture
/etc/dpkg/symbols/paquet.symbols

L’information de dépendance des bibliothèques partagées associée aux systèmes. arch est l’architecture du système actuel (obtenu par dpkg−architecture −qDEB_HOST_ARCH).

Affichage de “dpkg−query −−control−path paquet symbols”

Paquet fournissant des informations concernant les dépendances envers des bibliothèques partagées. Sauf indication contraire par le biais de −−admindir, ces fichiers sont par défaut dans /var/lib/dpkg.

Lors de l’analyse des symboles utilisés par tous les binaires, dpkg−shlibdeps retient la (plus grande) version minimale nécessaire pour chaque bibliothèque. À la fin du processus, il est capable d’écrire la dépendance minimale pour toutes les bibliothèques utilisées (à condition que l’information des fichiers symbols soit exacte).

Comme garde−fou, un fichier de symboles peut fournir un champ Build−Depends−Package de méta−information et dpkg−shlibdeps en extraira la version minimale requise par le paquet correspondant depuis ce champ Build−Depends et utilisera cette version si elle est supérieure à la version minimale calculée par l’examen des symboles.

Fichiers Shlibs
Les fichiers Shlibs associent directement une bibliothèque à une dépendance (sans regarder les symboles). Il agit donc souvent plus fortement que ce dont on aurait besoin mais il reste très sûr et facile à manipuler.

Les dépendances d’une bibliothèque sont recherchées à plusieurs endroits. Le premier fichier d’informations trouvé qui concerne la bibliothèque est utilisé :
debian/shlibs.local

Fichier particulier à un paquet remplaçant les informations qui concernent les dépendances envers des bibliothèques partagées.

/etc/dpkg/shlibs.override

Fichier système remplaçant les informations qui concernent les dépendances envers des bibliothèques partagées.

debian/*/DEBIAN/shlibs

Information sur la bibliothèque partagée générée par le processus actuel de construction qui invoque aussi dpkg−shlibdeps. Il n’est utilisé que si la bibliothèque se trouve dans l’arbre de construction du paquet. Le fichier shlibs qui construit l’arbre a priorité sur les fichiers shlibs des autres paquets binaires.

Affichage de “dpkg−query −−control−path paquet shlibs”

Paquet fournissant des informations concernant les dépendances envers des bibliothèques partagées. Sauf indication contraire par le biais de −−admindir, ces fichiers sont par défaut dans /var/lib/dpkg.

/etc/dpkg/shlibs.default

Fichier système par défaut concernant les informations de dépendance envers des bibliothèques partagées.

Les dépendances trouvées sont ensuite directement utilisées (sauf si elles sont filtrées parce qu’elles ont été identifiées comme étant en double, ou d’un niveau plus faible qu’une autre dépendance).

OPTIONS

dpkg−shlibdeps interprète des arguments sans option comme des commandes exécutables, comme si on avait simplement donné −eexécutable.
−e
exécutable

Cette option inclut les bonnes dépendances envers les bibliothèques partagées que demande exécutable. Cette option peut être utilisée plusieurs fois.

−lrépertoire

Prepend directory to the list of directories to search for private shared libraries (since dpkg 1.17.0). This option can be used multiple times.

Note : Utilisez cette option plutôt que le réglage de LD_LIBRARY_PATH, parce que cette variable d’environnement est utilisé pour contrôler l’éditeur de liens d’exécution et et servir d’elle pour définir les chemins des bibliothèques partagées au moment de la construction peut être problématique, par exemple, lors d’une compilation croisée.

−dchamp−dépendance

Cette option ajoute les dépendances destinées au champ « dépendance » du fichier de contrôle champ−dépendance. (Les dépendances pour ce champ sont dans la variable shlibs:champ−dépendance.)

L’option −dchamp−dépendance concerne tous les exécutables qui suivent l’option, jusqu’à la prochaine option −dchamp−dépendance. Par défaut, champ−dépendance vaut Depends.

Quand, dans plusieurs champs reconnus ayant trait aux dépendances comme les champs Pre−Depends, Depends, Recommends, Enhances ou Suggests apparaît la même entrée (ou bien un ensemble d’alternatives), dpkg−shlibdeps supprime automatiquement les dépendances dans tous les champs sauf celui qui représente les dépendances les plus importantes.

−ppréfixe−pour−le−nom−des−variables

Fait commencer les variables de substitution par préfixe−pour−le−nom−des−variables: au lieu de shlibs:. De même, toute variable de substitution commençant par préfixe−pour−le−nom−des−variables: (au lieu de shlibs:) est enlevée du fichier de substitution des variables.

−O[nom−de−fichier]

Print substitution variable settings to standard output (or filename if specified, since dpkg 1.17.2), rather than being added to the substitution variables file (debian/substvars by default).

−ttype

Prefer shared library dependency information tagged for the given package type. If no tagged information is available, falls back to untagged information. The default package type is deb. Shared library dependency information is tagged for a given type by prefixing it with the name of the type, a colon, and whitespace.

−Lfichier−local−shlibs

Lire les informations de remplacement concernant les dépendances envers les bibliothèques partagées dans fichier−local−shlibs au lieu de debian/shlibs.local.

−Tfichier/substvars

Écrire les variables de substitution dans fichier/substvars ; le fichier par défaut est debian/substvars.

−v

Enable verbose mode (since dpkg 1.14.8). Numerous messages are displayed to explain what dpkg−shlibdeps does.

−xpackage

Exclude the package from the generated dependencies (since dpkg 1.14.8). This is useful to avoid self−dependencies for packages which provide ELF binaries (executables or library plugins) using a library contained in the same package. This option can be used multiple times to exclude several packages.

−Srépertoire−construction−paquet

Look into package−build−dir first when trying to find a library (since dpkg 1.14.15). This is useful when the source package builds multiple flavors of the same library and you want to ensure that you get the dependency from a given binary package. You can use this option multiple times: directories will be tried in the same order before directories of other binary packages.

−Ipackage−build−dir

Ignore package−build−dir when looking for shlibs, symbols, and shared library files (since dpkg 1.18.5). You can use this option multiple times.

−−ignore−missing−info

Do not fail if dependency information can’t be found for a shared library (since dpkg 1.14.8). Usage of this option is discouraged, all libraries should provide dependency information (either with shlibs files, or with symbols files) even if they are not yet used by other packages.

−−warnings=valeur

value is a bit field defining the set of warnings that can be emitted by dpkg−shlibdeps (since dpkg 1.14.17). Bit 0 (value=1) enables the warning “symbol sym used by binary found in none of the libraries”, bit 1 (value=2) enables the warning “package could avoid a useless dependency” and bit 2 (value=4) enables the warning “binary should not be linked against library”. The default value is 3: the first two warnings are active by default, the last one is not. Set value to 7 if you want all warnings to be active.

−−admindir=dir

Change the location of the dpkg database (since dpkg 1.14.0). The default location is /var/lib/dpkg.

−?, −−help

Affiche un message d’aide puis quitte.

−−version

Affiche le numéro de version puis quitte.

DIAGNOSTICS

Avertissements
Depuis que dpkg−shlibdeps analyse l’ensemble des symboles utilisés par chaque binaire généré par le paquet, il est en mesure d’émettre des avertissements dans plusieurs cas. Ils vous informent des choses qui peuvent être améliorées dans le paquet. Dans la plupart des cas, ces améliorations concernent directement les sources amont. Dans l’ordre d’importance décroissant, voici les différents avertissements que vous pouvez rencontrer :
symbole
sym utilisé par binaire trouvé dans aucune des bibliothèques.

Le symbole indiqué n’a pas été trouvé dans les bibliothèques liées au binaire. Le binaire est probablement plutôt une bibliothèque et elle doit être liée avec une bibliothèque supplémentaire durant le processus de construction (l’option −lbibliothèque de l’éditeur de liens).

binary contient une référence non résolue au symbole sym: il s’agit
probablement d’un greffon (plugin)

Le symbole indiqué n’a pas été trouvé dans les bilbiothèques liées avec le fichier binaire. Le binaire est très probablement un greffon (plugin) et le symbole est probablement fourni par le programme qui charge ce greffon. En théorie, un greffon n’a pas de « SONAME » mais ce binaire en possède un et n’a pas pu être identifié en tant que tel. Cependant, le fait que le binaire soit stocké dans un répertoire non public est une indication forte qu’il ne s’agit pas d’une bibliothèque partagée normale. Si le binaire est vraiment un greffon, vous pouvez ignorer cet avertissement. Il existe cependant une possibilité qu’il s’agisse d’un vrai binaire et que les programmes avec lequel il est lié utilisent un RPATH afin que le chargeur dynamique le trouve. Dans ce cas, la bibliothèque est incorrecte et doit être corrigée.

paquet pourrait éviter une dépendance inutile si le binaire n’était pas
lié avec
bibliothèque (il ne fait usage d’aucun de ses symboles)

Aucun des binaires liés à la bibliothèque utilise les symboles qu’elle fournit. En corrigeant tous les binaires, vous éviteriez la dépendance associée à cette bibliothèque (à moins que la même dépendance soit également liée à une autre bibliothèque qui est elle réellement utilisée).

package could avoid a useless dependency if binaries were not linked
against
library (they use none of the library’s symbols)

Identique à l’avertissement précédent, pour des binaires multiples.

le binaire ne devrait pas être lié avec la bibliothèque (il ne fait
usage d’aucun de ses symboles)

The binary is linked to a library that it doesn’t need. It’s not a problem but some small performance improvements in binary load time can be obtained by not linking this library to this binary. This warning checks the same information as the previous one but does it for each binary instead of doing the check globally on all binaries analyzed.

Erreurs
dpkg−shlibdeps
échouera s’il ne peut pas trouver de bibliothèque publique utilisée par un binaire ou si cette bibliothèque n’a pas d’informations sur les dépendances associées (soit les fichier shlibs, soit le fichier des symboles). Une bibliothèque publique a un SONAME et un numéro de version (libsomething.so.X). Une bibliothèque privée (comme un module additionnel) ne devrait pas avoir de SONAME et n’a pas besoin d’avoir de version.
impossible de trouver la bibliothèque
library−soname demandée par le
binaire
(son RPATH est ’rpath’)

The binary uses a library called library−soname but dpkg−shlibdeps has been unable to find the library. dpkg−shlibdeps creates a list of directories to check as following: directories listed in the RPATH of the binary, directories added by the −l option, directories listed in the LD_LIBRARY_PATH environment variable, cross multiarch directories (ex. /lib/arm64−linux−gnu, /usr/lib/arm64−linux−gnu), standard public directories (/lib, /usr/lib), directories listed in /etc/ld.so.conf, and obsolete multilib directories (/lib32, /usr/lib32, /lib64, /usr/lib64). Then it checks those directories in the package’s build tree of the binary being analyzed, in the packages’ build trees indicated with the −S command−line option, in other packages’ build trees that contains a DEBIAN/shlibs or DEBIAN/symbols file and finally in the root directory. If the library is not found in any of those directories, then you get this error.

Si la bibliothèque non trouvée est cependant disponible dans le répertoire privé de ce même paquet, alors il vous faut ajouter ce répertoire avec −l. S’il est dans un autre paquet binaire en cours de construction, alors assurez−vous que les fichiers shlibs/symbols de ce paquet sont déjà créés et que −l contient le répertoire approprié si c’est aussi un répertoire privé.

aucune information de dépendance trouvée pour la bibliothèque (utilisée
par le
binaire).

The library needed by binary has been found by dpkg−shlibdeps in library−file but dpkg−shlibdeps has been unable to find any dependency information for that library. To find out the dependency, it has tried to map the library to a Debian package with the help of dpkg −S library−file. Then it checked the corresponding shlibs and symbols files in /var/lib/dpkg/info/, and in the various package’s build trees (debian/*/DEBIAN/).

Cet échec peut être causé par un shlibs ou un fichier de symboles qui serait mauvais ou manquant dans le paquet. Une autre cause serait que la bibliothèque soit construite au sein du même paquet source et que les fichiers shlibs n’aient pas encore été créés (dans ce cas debian/rules doit être modifié pour créer le shlibs avant l’appel de dpkg−shlibdeps). Un mauvais RPATH peut aussi conduire à ce que la bibliothèque soit trouvée sous un nom non−canonique (comme : /usr/lib/openoffice.org/../lib/libssl.so.0.9.8 au lieu de /usr/lib/libssl.so.0.9.8) qui n’est associé à aucun paquet, dpkg−shlibdeps essaie de travailler sur ce nom non−canonique (en utilisant realpath(3)), mais cela ne fonctionne pas toujours. Il est toujours préférable de bien nettoyer le RPATH du binaire afin d’éviter ces problèmes.

L’appel de dpkg−shlibdeps en mode bavard (−v) fournira beaucoup plus d’informations sur l’endroit où il a essayé de trouver l’information sur les dépendances. Ceci peut être utile si vous ne comprenez pas pourquoi vous obtenez cette erreur.

VOIR AUSSI

deb−shlibs(5), deb−symbols(5), dpkg−gensymbols(1).

TRADUCTION

Ariel VARDI <ariel.vardi [AT] freesbee.fr>, 2002. Philippe Batailler, 2006. Nicolas François, 2006. Veuillez signaler toute erreur à <debian−l10n−french [AT] lists.org>.

COMMENTS