Je sais qu'il existe une commande qui répertorie les bibliothèques et les versions respectives auxquelles un logiciel a été associé.
Quelque chose avec ld ou libtool?
Mais je ne me souviens tout simplement pas. J'ai passé du temps sur Google mais je n'ai rien trouvé d'utile.
Mettre à jour ldd <binary>
aiderait sur Linux, ( de @ Ernelli ) alors que j’ai trouvé que otool -L <binary>
fait quelque chose de similaire sur MacOS X.
Essayez ldd binary-exec
Exemple:
~$ 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)
Pour trouver ce dont il a directement besoin:
readelf -d APP | grep NEEDED
ldd
, comme mentionné ailleurs, montrera toutes les bibliothèques directes et indirectes - tout ce dont il a besoin au moment de l'exécution. Cela peut ne pas être une liste complète, puisque vous pouvez ouvrir dynamiquement des choses avec dlopen (), mais cela devrait fonctionner 99% du temps.
ld et libtool sont utilisés au moment de la compilation/du lien. Ils ne sont pas utiles une fois que vous avez une application.
EDIT Je peux voir par les réponses ultérieures que vous posiez sur OSX, mais je souhaite ajouter à ma réponse sur les outils Linux:
Une chose que j'ai oublié de mentionner, il y a longtemps. vous avez demandé des versions. Ni ldd
ni readelf
ne répondront à la question "quelle version". Ils vous indiqueront le nom du 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 versionnés, et vous devriez avoir beaucoup plus de niveaux inférieurs avec nm
pour les voir,
Une autre façon serait d'utiliser objdump.
objdump -x "binary" | GREP BESOIN
Cela montre toutes les dépendances nécessaires uniquement pour ce binaire. Très utile.