Bonjour,
J'utilise une bibliothèque statique (.a) qui propose beaucoup de fonctions, et je voudrai savoir si le binaire final varie en fonction uniquement des procédures et fonctions utilisé ou de la bibliothèque entière.
Merci !!
Bonjour,
J'utilise une bibliothèque statique (.a) qui propose beaucoup de fonctions, et je voudrai savoir si le binaire final varie en fonction uniquement des procédures et fonctions utilisé ou de la bibliothèque entière.
Merci !!
Uniquement ce qui est utilisé.
Ce n'est pas une question sur le langage C.
Le comportement des éditeurs de liens et autres gestionnaires de bibliothèques dépend de l'implémentation. Il n'y a donc pas de réponse universelle.
J'ai pu cependant observer que sur des cibles hébergées (hosted, PC/Win, PC/Linux etc.) toute la bibliothèque était importée, y compris les fonctions non utilisées. Par contre, et c'est plutôt logique, en embarqué, des efforts d'optimisation sont faits pour n'importer que les fonctions réellement utilisées.
Je viens de tester avec BCB et quelques fonction de la zlib
L'executable ne prend apparement juste ce dont il a besoin.
J'attends de voir mon premier gestionnaire de bibliothèque qui ne prends pas que ce qui est nécessaire. La granularité peut varier (fichier ou partie de fichier comme une fonction), mais l'idée des bibliothèques a toujours été cela. Ce que j'ai vu par contre, c'est des éditeurs de liens qui ont besoin qu'on mette plusieurs fois une bibliothèque parce qu'ils ne traitent pas les dépendances circulaires entre elles.
Cela fait longtemps que j'ai utilisé Windows, mais à l'époque les éditeur de liens fonctionnaient sur base du fichier.J'ai pu cependant observer que sur des cibles hébergées (hosted, PC/Win, PC/Linux etc.) toute la bibliothèque était importée, y compris les fonctions non utilisées.
La situation sous Unix est traditionnellement la même, mais au moins avec gcc pour les cibles utilisant ELF, on peut faire plus petit.
J'ai travaillé avec des éditeurs de liens qui fonctionnent fichier objet par fichier objet. Donc, pour une bibliothèque statique, ça dépendait alors de la façon dont elle avait été écrite: Si toutes les fonctions de la bibliothèque étaient dans le même .c, alors toute la bibliothèque était importée d'un coup...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager