2011-02-08 4 views
3

J'essaye de construire un binaire statique avec CMake. J'ai regardé autour de moi et trouvé un certain nombre de solutions non descriptives (par exemple ajouter le drapeau de liaison "-static"), mais je ne suis pas sûr de savoir comment les tester.CMake: Construire un binaire statique

Comment puis-je savoir si une bibliothèque spécifique (par exemple, Threading) a été statiquement intégrée dans mon binaire?

Répondre

1

Non lié à CMake, mais si vous utilisez un système UNIX, l'utilitaire file peut au moins vous dire si votre binaire utilise ou non des bibliothèques partagées.

1

Sous Linux, vous pouvez également utiliser la commande ldd qui indique à quelles bibliothèques vos liens binaires sont dynamiquement liés.

3

Comme trenki dit, utilisez ldd pour obtenir la liste des bibliothèques liées dynamiquement que votre exécutable dépend, et vérifier pour être sûr que le code que vous vouliez statiquement Liées est pas là.

Vous pouvez également utiliser les commandes nm et strings pour obtenir un vidage des symboles de programme et du texte lisible par l'homme, respectivement, dans votre exécutable. Utilisez grep pour filtrer cette sortie pour les identifiants dans votre bibliothèque statique que vous référencez dans votre code, comme les noms de fonction. Enfin, vous pouvez utiliser la commande objdump pour obtenir une liste de désassemblage de votre programme. Les fonctions de la bibliothèque statique devraient y apparaître.

La première approche, couplée à un exécutable qui compile, relie et fonctionne suffisamment bien pour démontrer la fonctionnalité que la bibliothèque statique fournit est probablement un test suffisant. Utilisez la deuxième ou la troisième approche seulement si vous voulez creuser profondément.

Questions connexes