Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1222 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c] difference object, library, archive

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] difference object, library, archive

n°542908
slvn
Posté le 18-10-2003 à 19:31:57  profilanswer
 

c est quoi la difference en un object, une library, et une archive :??:

mood
Publicité
Posté le 18-10-2003 à 19:31:57  profilanswer
 

n°542913
Taz
bisounours-codeur
Posté le 18-10-2003 à 19:51:05  profilanswer
 

que c'est pas français ni standard :o

n°542922
matafan
Posté le 18-10-2003 à 20:25:43  profilanswer
 

Grosso modo, un « object » c'est un binaire généré par le compilo. Ca n'est pas exécutable : c'est destiné à être linké, statiquement (par le linker, à la compilation) ou dynamiquement (par le binder, à l'execution) à d'autres objets ou a un exétuable.
 
Une « archive » c'est un fichier qui contient plusieurs « shared objects ». C'est juste un moyen de regrouper tout ca en un fichier. Par exemple sous unix c'est un fichier « .a » généré par l'archiveur historique « ar ». Tu peux voir le contenu d'une archive avec « ar -t file.a ».
 
Une « library » (bibliothèque en français mais souvent appelée librairie, d'ailleurs je dis librairie et j'ai tord) c'est un binaire ou un ensemble de binaires qui « exportent » des symboles (fonctions, variables) destinés a être utilisés dans un programme. Il y a des librairies statiques et des librairies dynamiques. Un librairie statique est « integrée » dans ton programme a l'édition de lien (au moment de la compilation). Ca grossi donc ton programme. Une librairie dynamique est livrée séparément, et est chargée par ton programme a l'exécution. Ca ne grossi pas ton programme.
 
Concretement un librairie ça peut se présenter sous la forme d'un fichier objet (.o ou .so), d'un répertoire avec plusieurs fichiers objets a l'intérieur, ou encore d'un fichier archive.


Message édité par matafan le 18-10-2003 à 20:28:09
n°542926
slvn
Posté le 18-10-2003 à 20:47:18  profilanswer
 

euh, la difference est un peu flou:
si je fait

Code :
  1. gcc -c a.o b.o c.o -o d.o


j obtient un objet qui est une somme de plusieurs objet. donc est ce que c est une Archive (.a) ou un Object (.o), ou bien meme un SharedObject (.so) ?

n°543128
gilou
Modérateur
Modzilla
Posté le 19-10-2003 à 15:15:06  profilanswer
 

Slvn a écrit :

euh, la difference est un peu flou:
si je fait

Code :
  1. gcc -c a.o b.o c.o -o d.o


j obtient un objet qui est une somme de plusieurs objet. donc est ce que c est une Archive (.a) ou un Object (.o), ou bien meme un SharedObject (.so) ?  


Un objet non partagé est incorporé dans ton programme executable au moment de la generation de cet executable.
 
Un objet partagé n'est pas incorporé dans ton programme, mais lors de l'execution de ton programme, l'objet partagé vas etre mis en memoire, et utilisé par ton programme. Partagé signifie qu'il peut etre partagé par plusieurs programmes qui en chargeront chacun une copie en memoire.
 
Avantage des .so: ne mange pas de place, et il y a moyen de ne pas charger en memoire si il n'est pas utilisé.
inconvenient: si un .so est modifié, pour un programme, il risque de ne plus marcher avec un autre...
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°544305
matafan
Posté le 19-10-2003 à 20:10:23  profilanswer
 

Citation :

Partagé signifie qu'il peut etre partagé par plusieurs programmes qui en chargeront chacun une copie en memoire.


 
Non justement : le « texte » de l'objet (le code) est chargé une seule fois en mémoire. Tous les programmes linkés dynamiquement vont utiliser le même texte. Les data par contre ne sont pas partagées et sont « recopiées » a chaque fois.
 
Concretement a la compilation, chaque appel a une fonction de cet objet est traduite un saut vers du « glue code ». Ce sont quelques instructions qui vont chercher dans la stack l'adresse exacte de la fonction cible (celle de l'objet partagé). Et cette adresse est écrite par le binder au début de l'exécution.

n°544329
gilou
Modérateur
Modzilla
Posté le 19-10-2003 à 20:41:45  profilanswer
 

Matafan a écrit :

Citation :

Partagé signifie qu'il peut etre partagé par plusieurs programmes qui en chargeront chacun une copie en memoire.


 
Non justement : le « texte » de l'objet (le code) est chargé une seule fois en mémoire. Tous les programmes linkés dynamiquement vont utiliser le même texte. Les data par contre ne sont pas partagées et sont « recopiées » a chaque fois.
 
Concretement a la compilation, chaque appel a une fonction de cet objet est traduite un saut vers du « glue code ». Ce sont quelques instructions qui vont chercher dans la stack l'adresse exacte de la fonction cible (celle de l'objet partagé). Et cette adresse est écrite par le binder au début de l'exécution.


Ca doit dependre de flags au link, ca, non?
Fait un peu plus d'un an que j'y ai pas touché, alors c'est plus totalement frais dans ma memoire, surtout que si il y a bien un truc inhomogene entre les differentes plateformes UNIX, c'est bien ca.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c] difference object, library, archive

 

Sujets relatifs
[VBA] [DEBUTANT] Inclure la réf Microsoft Word x.x Object Libraryvisual object cobol (visoc) ou le trouver ??
Différence entre le C et le C++ ??Exécuter une library (.so) sous Linux
[uml] difference entre aggregation et association ???Différence entre office xp pro et office xp developpeur ?
Difference C, C++GD 2 et TTF library (FreeType?)
difference entre loperateur = et == 
Plus de sujets relatifs à : [c] difference object, library, archive


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR