librairies

La question :

Bonjour,

Je me pose une question sur la différence entre les "headers" et
les "library".
J'en entends parler essentiellement pour les programmes en C et C++ (je n'ai
pas eu l'occasion de me frotter à beaucoup trop de langages), d'ou le
X-Post + Follow-up.

Dans les "headers", ce sont des définitions qu'on retrouve. Dans
les "libraries" aussi. Quelles sont les raisons pour lesquelles on a donné
2 noms différents, mis une séparation franche entre ces deux trucs?

J'ai un début de réponse, mais je crains qu'il ne soit pas suffisament
juste:
Les "headers" sont des "définitions" qui ne sont utiles qu'à (que pour)
compiler du code source. Les "libs" sont, par contre nécessaires à
l'exécution du programme qui s'appuit dessus.

C'est presque juste? Merci d'avance pour les eclaircissements.

Poser votre question sur le forum Programmation

Les 9 réponses :

Rakotomandimby (R12y) Mihamina a écrit :


Bonjour,

Je me pose une question sur la différence entre les "headers" et
les "library".


Les headers sont les points d'accès à la librairie. Ainsi, tu y retrouve
l'ensemble des fonctions qu'un programme utilisateur peut appeler ainsi
que les structures de données associées ou encore d'autres ressources
comme des définitions de valeurs ...

La librairie contient le code machine des fonctions d'interfaces qui est
utilisé au moment de l'édition de lien pour réaliser la fonction appelée.

Ainsi, dans un header tu as la fonction:
void toto(void);

La la librairie tu as une sorte d'index:
void toto(void) est à l'adresse 0x000AE3FG du fichier.
(En fait, c'est plus complexe mais c'est l'idée)



J'en entends parler essentiellement pour les programmes en C et C++ (je n'ai
pas eu l'occasion de me frotter à beaucoup trop de langages), d'ou le
X-Post + Follow-up.

Dans les "headers", ce sont des définitions qu'on retrouve. Dans
les "libraries" aussi. Quelles sont les raisons pour lesquelles on a donné
2 noms différents, mis une séparation franche entre ces deux trucs?


Le header représente l'interface de la librairie c-à-d les points
d'accès aux services que proposent la librairie.

Un des avantages est que tu peux changer le code compilé de la librairie
de façon transparente pour le programme utilisateur (version différente,
plateformes différentes ... ) au moment de la compilation.

C'est une forme d'encapsulation.



J'ai un début de réponse, mais je crains qu'il ne soit pas suffisament
juste:
Les "headers" sont des "définitions" qui ne sont utiles qu'à (que pour)
compiler du code source. Les "libs" sont, par contre nécessaires à
l'exécution du programme qui s'appuit dessus.


Cela dépends, les librairies dynamiques (.so sous linux) sont chargée à
l'exécution et sont donc nécessaires au moment de l'exécution; les
librairies statiques (.a sous linux) sont incorporées au programme au
moment de la compilation (édition de liens en fait) et ne sont donc plus
nécessaires à l'exécution.



C'est presque juste? Merci d'avance pour les eclaircissements.


D'un point de vue fonctionnel c'est correct.

Mais c'est manquer tous les problèmes que résolvent les librairies comme
la modularité, la réutilisation, la réduction d'impact dans le design et
dans la compilation ...

Si tu cherches sur Google (Wikipedia) "Edition de liens" "linker"
"Bibliothèque C/C++", tu devrais trouver plus d'informations.

Michael

Rakotomandimby (R12y) Mihamina a écrit :


Bonjour,

Je me pose une question sur la différence entre les "headers" et
les "library".


Les headers sont les points d'accès à la librairie. Ainsi, tu y retrouve
l'ensemble des fonctions qu'un programme utilisateur peut appeler ainsi
que les structures de données associées ou encore d'autres ressources
comme des définitions de valeurs ...

La librairie contient le code machine des fonctions d'interfaces qui est
utilisé au moment de l'édition de lien pour réaliser la fonction appelée.

Ainsi, dans un header tu as la fonction:
void toto(void);

La la librairie tu as une sorte d'index:
void toto(void) est à l'adresse 0x000AE3FG du fichier.
(En fait, c'est plus complexe mais c'est l'idée)



J'en entends parler essentiellement pour les programmes en C et C++


(je n'ai


pas eu l'occasion de me frotter à beaucoup trop de langages), d'ou le
X-Post + Follow-up.

Dans les "headers", ce sont des définitions qu'on retrouve. Dans
les "libraries" aussi. Quelles sont les raisons pour lesquelles on a


donné


2 noms différents, mis une séparation franche entre ces deux trucs?


Le header représente l'interface de la librairie c-à-d les points
d'accès aux services que proposent la librairie.

Un des avantages est que tu peux changer le code compilé de la librairie
de façon transparente pour le programme utilisateur (version différente,
plateformes différentes ... ) au moment de la compilation.

C'est une forme d'encapsulation.



J'ai un début de réponse, mais je crains qu'il ne soit pas suffisament
juste:
Les "headers" sont des "définitions" qui ne sont utiles qu'à (que pour)
compiler du code source. Les "libs" sont, par contre nécessaires à
l'exécution du programme qui s'appuit dessus.


Cela dépends, les librairies dynamiques (.so sous linux) sont chargée à
l'exécution et sont donc nécessaires au moment de l'exécution; les
librairies statiques (.a sous linux) sont incorporées au programme au
moment de la compilation (édition de liens en fait) et ne sont donc plus
nécessaires à l'exécution.



C'est presque juste? Merci d'avance pour les eclaircissements.


D'un point de vue fonctionnel c'est correct.

Mais c'est manquer tous les problèmes que résolvent les librairies comme
la modularité, la réutilisation, la réduction d'impact dans le design et
dans la compilation ...

Si tu cherches sur Google (Wikipedia) "Edition de liens" "linker"
"Bibliothèque C/C++", tu devrais trouver plus d'informations.

Michael
PS: message dupliqué. Problème d'envoi

Rakotomandimby (R12y) Mihamina a écrit :


Je me pose une question sur la différence entre les "headers" et
les "library".
J'en entends parler essentiellement pour les programmes en C et C++ (je n'ai
pas eu l'occasion de me frotter à beaucoup trop de langages), d'ou le
X-Post + Follow-up.



Dans les "headers", ce sont des définitions qu'on retrouve. Dans
les "libraries" aussi. Quelles sont les raisons pour lesquelles on a donné
2 noms différents, mis une séparation franche entre ces deux trucs?


Le vocabulaire n'est pas toujours rigueureux, et sous
« library », on peut deux choses : un ensemble de
fonctionnalités qu'on met à la disposition d'un client, ou un
type de fichier bien précis qui contient les des fichiers objets
(donc, du code compilé) qu'on peut linker avec sont application.
Dans le premier sens, les en-têtes font partie de la
bibliothèque : quand tu livres une bibliothèque à un client, tu
livre un ensemble de fichiers, qui comporte et des en-têtes, et
(généralement) une ou plusieurs fichiers bibliothèques.

En tant que types de fichiers, un fichier bibliothèque contient
des fichiers objets, que tu linkes avec ton application, tandis
qu'un fichier en-tête contient des declarations dont a besoin le
compilateur, et tu l'inclus dans les fichiers source qui se
servent de la bibliothèque. En principe, il n'y a aucune raison
d'en avoir les deux, mais pour des raisons historiques, c'est
comme ça que fonctionne toutes les implémentations C et C++ que
je connais.


J'ai un début de réponse, mais je crains qu'il ne soit pas suffisament
juste:
Les "headers" sont des "définitions" qui ne sont utiles qu'à (que pour)
compiler du code source. Les "libs" sont, par contre nécessaires à
l'exécution du programme qui s'appuit dessus.



C'est presque juste? Merci d'avance pour les eclaircissements.


C'est tout à fait juste. Sauf que si tu dois livrer une
bibliothèque, tu dois en livrer les deux. (Pour ajouter à la
confusion, si tu travailles sous Unix, tu livres l'ensemble dans
un fichier archive, un .a. Qui est aussi le type d'un fichier de
bibliothèque statique.)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Le 12/02/07 9:02, dans <eqp6sb$uuf$>, « Rakotomandimby
(R12y) Mihamina » a écrit :


Je me pose une question sur la différence entre les "headers" et
les "library".
J'en entends parler essentiellement pour les programmes en C et C++ (je n'ai
pas eu l'occasion de me frotter à beaucoup trop de langages), d'ou le
X-Post + Follow-up.


Et je ne lirais ainsi pas la suite...


Dans les "headers", ce sont des définitions qu'on retrouve. Dans
les "libraries" aussi. Quelles sont les raisons pour lesquelles on a donné
2 noms différents, mis une séparation franche entre ces deux trucs?


Le C et le C++ sont différents, ce ne sont pas les même langages, en
particulier pour les includes. Je vais donc parler du C.


J'ai un début de réponse, mais je crains qu'il ne soit pas suffisament
juste:
Les "headers" sont des "définitions" qui ne sont utiles qu'à (que pour)
compiler du code source.


Les includes sont des fichiers sources (du texte) qui contiennent des
définitions de variables, de fonctions, de constantes. Les includes en C ont
l'extension .h.

Un source C utilise l'ordre include pour inclure un include


Les "libs" sont, par contre nécessaires à
l'exécution du programme qui s'appuit dessus.


Une bibliothèque est un fichier binaire qui contient les fonctions qui ont
été définies dans le fichier include. La bibliothèque peut être statique
(intégrée à l'exécutable par le linker) ou dynamique (liée à l'exécutable au
moment de l'exécution du code).

Les binaires sous unix ont l'extension .a, .so, .dylib...

Exemple, la fonction printf est prototypée dans l'include stdio.h et son
code se trouve dans la bibliothèque C appelée traditionnellement libc.

--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.

Rakotomandimby (R12y) Mihamina a écrit :


Bonjour,

Je me pose une question sur la différence entre les "headers" et
les "library".
Dans les "headers", ce sont des définitions qu'on retrouve. Dans
les "libraries" aussi. Quelles sont les raisons pour lesquelles on a donné
2 noms différents, mis une séparation franche entre ces deux trucs?


La traduction de "library" n'est pas librairie mai bibliothèque et un
fichier "header" est un fichier contentant des entêtes. Le premier
contient tout le code des fonctionnalités et les seconds ne sont
nécessaires que pour la compilation pour permettre au compilateur de
connaître les sctructures qu'il est en train de manipuler et de détecter
d'eventuelles erreurs.

Cordialement,
--
Encolpe DEGOUTE
http://encolpe.degoute.free.fr/
Logiciels libres, hockey sur glace et autres activités cérébrales

Poser votre question sur le forum Programmation

Questions similaires :

choix librairies pour appli openGL

bonjour, je dois developper une application graphique openGL utilisable sous linux et IRIX(SGI). j'explore actuellement les choix de librairie de fenetres avant de me lancer, tete baisee, ds vi 1/ quelle librairie de fenetres me conseillez vous ? - GLUT est fournis avec Mesa mais est il dispo...