48 votes

Recherche des bibliothèques contre lesquelles un binaire a été lié

Je sais qu'il existe une commande qui me liste les librairies et les versions respectives d'un logiciel a été lié.

Quelque chose avec ld ou libtool ?

Mais je n'arrive pas à m'en souvenir. J'ai passé un peu de temps sur google mais je n'ai rien trouvé d'utile.

Mise à jour
ldd <binary> serait utile sous linux, ( de @ Ernelli ) alors que j'ai constaté que otool -L <binary> fait quelque chose de similaire sous MacOS X.

48voto

Chinmay235 Points 51

T ldd binaire-exec

Ejemplo:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

19voto

Lark Points 1640

Pour trouver ce dont il a directement besoin :

readelf -d APP | grep NEEDED

ldd comme mentionné ailleurs, affichera toutes les librairies directes et indirectes - tout ce dont il a besoin au moment de l'exécution. Cette liste peut ne pas être complète, puisque vous pouvez ouvrir dynamiquement des choses avec dlopen(), mais cela devrait fonctionner dans 99% des cas.

ld et libtool sont utilisés au moment de la compilation/liaison. Ils ne sont pas utiles une fois que vous avez une application.

EDITAR Je vois dans les réponses ultérieures que vous posiez des questions sur OSX, mais je voudrais compléter ma réponse sur les outils Linux :

J'ai oublié de mentionner une chose, il y a un certain temps : vous avez posé une question sur les versions. Ni l'une ni l'autre ldd ni readelf répondra à la question "quelle version". Ils vous indiqueront le nom de fichier de la bibliothèque que vous recherchez, et la convention de dénomination peut contenir des informations sur la version, mais rien ne l'impose. Les symboles peuvent être soumis à une version, et il vous faudrait alors vous pencher sur un niveau encore plus bas à l'aide de nm pour les voir,

11voto

ChbyMnky Points 11

Une autre solution consisterait à utiliser objdump.

objdump -x "binary" | grep NEEDED

Cela montre toutes les dépendances nécessaires uniquement pour ce binaire. Très utile.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X