Obtenir la liste des bibliothèques statiques utilisés dans un fichier exécutable
Depuis ldd
répertorie uniquement les bibliothèques dynamiques, il est un moyen pour extraire les informations sur les bibliothèques statiques utilisés pour créer l'exécutable?
Vous devez vous connecter pour publier un commentaire.
ldd <exe filename>
montre liés dynamiquement les bibliothèquesnm <exe filename>
montre les symboles dans le fichier.Pour voir les symboles qui viennent de bibliothèques statiques nécessite l'exécution de
nm
contre ces bibliothèques pour obtenir une liste des symboles (fonctions, etc.) en eux, puis de les comparer à ce que votre liste de symboles à partir denm <exe filename>
.Vous comparez des listes avec le
comm
de commande. Voirman comm
pour plus de détails.Ceci a été pris à partir de ce forum ici.
Non, les noms des bibliothèques sont ignorées pendant le processus de liaison. Toutefois, si votre exécutable contient les informations de débogage (c'est à dire qu'il a été compilé avec l'option-g drapeau), vous pourriez être en mesure d'obtenir l'information de qui.
Si vous avez le code source et ne veux pas aller à travers tout le code pour cela, vous pouvez générer un fichier de la carte lors de la compilation de savoir qui bibliothèques statiques sont liés.
Par exemple
g++ -Xlinker -Map=a.map main.c
, vérifiez le fichier de mappage pour lié bibliothèque statique de l'information.À moins d'un compilateur magasins une sorte de méta-données à l'intérieur de la binaire puis, non. Une bibliothèque statique est du code compilé directement dans le binaire.
Il n'y a aucun moyen d'obtenir la liste des bibliothèques statiques à l'intérieur de certaines ELF exécutable.
Parce que pour l'éditeur de liens, une bibliothèque statique est juste utilisé comme un "paresseux" ensemble des membres. De sorte que le montant exécutable ELF serait contiennent uniquement les membres nécessaires pour faire un lien. Ainsi, les membres comme
foo2.o
delibfoo.a
sont liés, comme si l'objet fichierfoo2.o
était lié à l'exécutable (à condition que certaines symbole défini dansfoo2
est nécessaire, c'est à dire référencé quelque part).Bien sûr, à l'aide de
nm
, ouobjdump
, oureadelf
, oustrings
sur certains ELFE exécutable peut donner quelques indications sur ce que les fichiers objets (y compris celles provenant statique bibliothèques) sont à l'intérieur, parce que vous allez voir des symboles définis dans la (les membres de) ces bibliothèques statiques (ou des chaînes de caractères littérales utilisé à l'intérieur d'eux).