Rechercher : dans
Par :

Libraries statiques et dynamiques

Dernière réponse le 1 nov 2008 à 22:14:12 mathieu, le 25 mai 2005 à 09:26:45 
 Signaler ce message aux modérateurs

Bonjour,

je nai toujours pas compris quelle était la différence ntre des librairies statiques et dynamiques. comment fonctionnent -elles. je sais juste que les packages de developpement installent les libs dynamiques et qu'elles sont nécessaires pour la compilation de certains programmes...

merci de m'éclairer!

merci!

Meilleures réponses pour « libraries statiques et dynamiques » dans :
[Sécurité] IP statique (fixe) ou dynamique ? VoirQu'appelle-t-on IP fixe/dynamique ? Comment choisir son adresse IP ? Que choisir entre adresse IP fixe ou dynamique ? Comment obtenir une adresse IP fixe ? Qu'appelle-t-on IP fixe/dynamique ? Quand vous vous connectez à internet, votre...
Unable to load dynamic library '/usr/lib/php4/20020429/mysql.so VoirVous obtenez un message du type suivant suite à une mise à jour de PHP : Unable to load dynamic library '/usr/lib/php4/20020429/gd2.so' - /usr/lib/php4/20020429/gd2.so: cannot open shared object file: No such file or directory in Unknown on line...
Créer un site beau, dynamique et respectueux des standards VoirVoici une liste de liens qui vous aideront à mieux exploiter les standards (HTML, CSS, DOM...) pour créer des sites plus beau, plus dynamiques et plus respectueux des standards. A la fin de cette page, il y a également une liste de...
Télécharger IP Dynamique VoirSi vous devez héberger un site web sur votre ordinateur, mais que vous n’avez pas d’adresse IP fixe, il est assez difficile d’accéder à votre page pour les internautes. IP Dynamique est un outil permettant d’héberger un site...
NAT - Translation d'adresses, port forwarding et port triggering VoirPrincipe du NAT Le mécanisme de translation d'adresses (en anglais Network Address Translation noté NAT) a été mis au point afin de répondre à la pénurie d'adresses IP avec le protocole IPv4 (le protocole IPv6 répondra à terme à ce problème). En...
NAT - Translation d'adresses VoirPrincipe du NAT Le mécanisme de translation d'adresses (en anglais Network Address Translation noté NAT) a été mis au point afin de répondre à la pénurie d'adresses IP avec le protocole IPv4 (le protocole IPv6 répondra à terme à ce problème). En...
Les constructeurs et les destructeurs en langage C++ VoirLa notion de constructeur Le constructeur est la fonction membre appelée automatiquement lors de la création d'un objet (en statique ou en dynamique). Cette fonction membre est la première fonction membre à être exécutée, il s'agit donc d'une...

1

mamiemando, le 25 mai 2005 à 09:29:38
Répondre à mamiemando

2

kmf31, le 25 mai 2005 à 10:21:48

Apart du lien donne par mamiemando qui explique tres bien les choses:

que les packages de developpement installent les libs dynamiques et qu'elles sont nécessaires pour la compilation de certains programmes...

Ce n'est pas exacte/correcte:

paquet bibliotheque simple: => libs dynamiques necessaire pour faire tourner une application qui en depend

paquet bibliotheque de developpement: => libs statiques ET
fichiers header *.h


Apres pour compiler une application qui depend d'une bibliotheque il faut avoir:

1) fichiers header *.h
2) soit lib dynamique OU soit lib statique

Comme les fichiers headers ne sont pas dans le paquet simple il faut alors installer le paquet developpement pour pouvoir compiler. Par defaut la compilation cree quand meme de programmes utilisant la lib dynamique sauf si on demande expressement de compiler en statique (par exemple avec l'option "-static" derrier gcc, g++ etc.). Dans le cas d'une compilation en statique la lib est mise ensemble avec le fichier executable ce qui cree de tres grands fichiers exectuables. Pour plus de details bien lire le lien!

Répondre à kmf31

3

mathieu, le 25 mai 2005 à 21:13:22

En fait, d'après ce que jai lu, on qualifie statiques certaines librairies car elles sont indivisibles d'un programme. cela veut donc dire qu'elles ne pourront pas être utilisées par une autre application? je doute de ce côté statique car on a besoin de celles ci si on veut compiler certains programmes...

dsl si je ne suis pas clair, jessaie de comprendre. c dur...

Répondre à mathieu

4

kmf31, le 25 mai 2005 à 22:02:32

Imagine toi:
programe = A
bibliotheque statique = B
bibliotheque dynamique = C

Il y a deux facons de compiler le programe:

1) en dynamique: => l'executable ne contient que A mais il faut que C soit toujours installe sinon on ne peut pas utiliser le programme:
Alors programe = A mais ca depend du C qui doit etre installe dans le systeme. Si on copie A sur un autre systeme linux ou il n'y a pas C ca ne marche plus!


2) en statique: => l'executable contient A+B (plus precisement: A+(copie de B))=> grand fichier et ca va toujours marcher meme sur un autre systeme linux ou il n'y a ni B ni C. Apres compilation on peut meme effacer la copie initiale de la bibliotheque B et l'exectutable fonctionnera toujours (mais on ne pourras plus compiler de nouveaux programes).

Exemple:

#include <stdio.h>

int main(){
  printf("Hello\n");
}

Tu mets ca (par copier-coller) dans un fichier appele "hello.c". Apres tu compiles ca de deux facons:
1) en dynamique:
gcc hello.c  -o hello_dynamique

2) en statique:
gcc hello.c -static -o hello_statique


Maintenant tu peux observer les choses suivantes:
------------------------------------------------------------------
1) Pour utiliser il n'y a pas de difference:
./hello_dynamique

=> ca affiche: Hello
./hello_statique

=> ca affiche aussi: Hello

2) Mais le fichier statique est beaucoup plus grand, verifie avec:
ls -l hello_*

car ca contient la bibliotheque libc en dur (a l'interieur du fichier).

3) Maintenant tu verifies la dependence dynamique des bibliotheques:
ldd hello_dynamique

=> affichage de:
libc.so.6 => /lib/libc.so.6 (0x40028000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
ou similaire.
ldd hello_statique

=> affichage de:
not a dynamic executable
(ou en francais). Ca veut dire "pas de l'executable dynamique" => ici ce n'est pas possible de verifier les dependences ce qui est logique car "hello_statique" n'est pas dynamique.
La raison pourquoi "hello_statique" est plus grand est que ca contient (l'equivalent de) /lib/libc.so.6 et /lib/ld-linux.so.2 dans son propre fichier. Par contre "hello_dynamique" est petit et il cherchera toujours les copies dynamiques dans le systeme.

4) Pour finir tu peux afficher le type des fichiers par:
file hello_*

=> affichage de:
hello_dynamique: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped
hello_statique: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.0, statically linked, not stripped

ou similaire. Peut-etre chez toi ca sera en francais. Ca signifie que "hello_dynamique" est un programe "dynamique utilisant de bibliotheques partagees" et "hello_statique" est un programe "statique".


En fait en statique c'est indivisible apres la compilation mais tu pourras toujours compiler un autre programe en utilisant la copie initiale de la bibliotheque statique (elle ne disparrait pas, elle est seulement copiee dans le programe statique).

J'espere qu'avec ca, ce sera claire!

Répondre à kmf31

5

 anyn, le 1 nov 2008 à 22:14:12

Merci bcp c tr clair

Répondre à anyn