Que contient une bibliothèque statique compilée par GCC?
-
05-07-2019 - |
Question
Mon application est liée à libsamplerate.a. Je le fais pour faciliter la distribution du binaire final.
Je crains que le code contenu dans le fichier .a ne dépende que d'autres bibliothèques que je devrais également distribuer.
Mais si ce n’est pas le cas, je crains de trop gonfler ma demande en incluant plusieurs copies de, par exemple. libc.
En quoi consistera exactement libsamplerate.a? Juste le bytecode de libsamperate? Ou plus?
La solution
Une bibliothèque statique est simplement une collection de fichiers objets. Lorsque vous compilez un programme dans une bibliothèque statique, le code objet des fonctions utilisées par votre programme est copié de la bibliothèque dans votre exécutable. La liaison avec une bibliothèque statique ne fera en sorte que des fonctions extérieures à cette bibliothèque soient incluses dans votre code.
Autres conseils
Un fichier .a est fondamentalement juste un paquet de fichiers .o. Vous pouvez en faire la démonstration à l'aide de l'outil ar
.
Par exemple, pour afficher le contenu de votre bibliothèque:
ar -t libsamplerate.a
Pour créer un fichier .a à partir de rien:
ar -r tim.a *.txt
Juste le code d'objet pour libsamplerate. La liaison statique avec une seule bibliothèque ne fait pas que toutes les bibliothèques soient liées statiquement; ce serait mauvais.