Forum Linux.mandriva questions relatives à l'execution d'un programme....

Posté par  .
Étiquettes : aucune
0
31
mar.
2005
Salut tout le monde !

Qu'un peut-il m'expliquer concretement ce que signifient les termes suivants? :

Librairie
Bibliothèque

En effet, qd on installe un programme sous linux, on est souvent confronté à des messages du type:

Il vous manque telle ou telle librairie ou bibliothèque pour installer ce programme etc....(qui sont des dépendances dont le programme a besoin, le mot dépendance est facile à comprendre lol ) Sous windows, on retrouve les fameuses DLL qui sont les équivalents des librairies sous linux je pense !

Je me suis donc demandé si en fait, une librairie n'était pas une procédure auquel fait appel le programme à moment donné et qu'il était nécessaire de charger pour l'executer.... Je me suis aussi demandé si une bibliothèque n'était pas un ensemble de données manipulées par un programme sans lesquelles, il ne pourrait pas s'exucuter....

Voilà, dites moi si je vois juste et si c pas le cas, merci de m'éclairer

A +
  • # Library == Bibliothèque != Librarie

    Posté par  (site web personnel) . Évalué à 8.

    Le terme anglais est 'library' qui se traduit en français par 'bibliothèque'.

    Une bibliothèque est un ensemble de fonctions que plusieurs programmes peuvent utiliser. Par exemple, la bibliothèque glibc (GNU libc) contient l'implémentation GNU des fonctions de base du C. La libxine (utilisée par Xine, Totem et Kaffeine au moins) offre des fonctions pour utiliser le moteur multimédia de Xine.

    L'utilisation en français du terme 'librairie' est fausse car dans une bibliothèque, on emprunte un livre qui est encore accessible aux autres (après l'avoir rendu, c'est une petite différence). Alors que dans une librairie, on achète un livre et quand il n'est plus disponible, personne d'autre ne peut y accéder (dans cette librairie). Je ne sais pas si j'ai été très clair.
  • # Re:questions relatives à l'execution d'un programme....

    Posté par  (site web personnel) . Évalué à 2.

    Une bibliothèque c'est un ensemble de fonctions auquelles le programme peut faire appel. C'est effectivement l'équivalent des DLL sous Windows.

    Quelques commandes pour te familiariser avec ça :

    ldd [prog] : affiche la liste des bibliothèques necessaires à l'execution de [prog]
    par exemple : ldd /bin/ls

    librt.so.1 => /lib/tls/librt.so.1 (0xb7fd4000)
    libacl.so.1 => /lib/libacl.so.1 (0xb7fcc000)
    libc.so.6 => /lib/tls/libc.so.6 (0xb7e98000)
    libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7e89000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fea000)
    libattr.so.1 => /lib/libattr.so.1 (0xb7e85000)

    ldconfig -v : affiche la liste des bibliothèques installées sur ton systeme (attention suivant ta distrib, il faudra peut-etre etre root)
    • [^] # Re: Re:questions relatives à l'execution d'un programme....

      Posté par  . Évalué à 1.

      Et t'en qu'on y est:
      Qu'elle est la différence exacte entre les bibliothèques statiques " .a" et dynamiques ".so" ?
      Comment fonctionnent-t-elles?
      • [^] # Re: Re:questions relatives à l'execution d'un programme....

        Posté par  (site web personnel) . Évalué à 3.

        elles fonctionnent bien, merci ;-)

        Non mais sérieux, ouvrez-le le bouquin de développement en C, c'est la base de chez base tout de même.

        Après pour répondre tout de même... une bibliothèque compilée en statique, il n'y a en a plus besoin pour l'exécution du programme vu que les fonctions nécessaires sont incluses dans l'exécutable au moment de la compilation ou plus exactement de l'édition des liens (ça fait un plus gros binaire).
        Les bibliothèques dynamiques - elles - sont indispensables pour l'exécution du programme vu que le code binaire des fonctions de la bibliothèque n'est pas dans l'exécutable mais justement dans ces librairies dynamiques (ça fait un plus petit binaire).

        La vocation d'une librairie dynamique est bien de regrouper ce qui est potentiellement utilisable par une foultitude de programmes et éviter que chacun ait "sa" version compilée de la fonction qui serait chargée autant de fois en mémoire que de programmes l'utilisant : elle est chargée une fois et utilisée autant de fois que nécessaires.
      • [^] # Re: Re:questions relatives à l'execution d'un programme....

        Posté par  . Évalué à 3.

        Le principe de base est de rendre communes les fonctions d'un programme qui présentent un intérêt général.

        Exemple : Ouvrir une fenêtre. Il est bien sûr inconcevable que chaque programmeur réécrive lui-même le système X-Window depuis zéro pour pouvoir travailler. A la place, il va faire appel à une fonction de réputation publique (dont on mettra le prototype dans un *.h pour que le programme C sache comment l'utiliser).

        Ensuite, au moment de construire l'exécutable, on intégrera dans le fichier les fonctions de gestion de fenêtres, déjà compilées à cet effet. C'est donc une bibliothèque statique. C'est exactement comme un exécutable sauf qu'il n'y pas de point d'entrée.

        Par contre, quand il commence à y avoir beaucoup de programmes quu ouvrent des fenêtres, on se rend compte que d'une part les exécutables sont gargantuesques (toute la gestion du X est intégrée dans l'exécutable juste pour afficher Hello World à l'écran), et que d'autre part il est idiot de charger 15 fois en mémoire les même fonctions ! A la place, on ne va compiler que le nécéssaire et l'on va laisser "en l'air" les reférences à la bibliothèque partagée. Ce sera alors le boulot du système d'exploitation de charger LORSQUE C'EST NECESSAIRE les ressources dont un logiciel a besoin et de résoudre les noms de fonctions en adresse mémoire.

        En outre, et c'est là l'intérêt majeur, si la ressource réclamée a déjà été chargée pour un autre logiciel, il est inutile de la charger une deuxième fois (gain de temps), et les deux programmes peuvent appeler le même endroit (gain de place).

        Avantage de la compilation statique: On obtient un exécutable parfaitement autonome, ou presque, qui pourra fonctionner toutes les plateforme équipées d'un même OS. Inconvénient: Cela génère des exécutables gigantesques pour rien.

        Avatnage de la compilation dynamique: On ne compile que ce qui est nécéssaire, on gagne du temps et de la place, et quand on met à jour une fonction, cela se répercute immédiatement sur tous les programmes qui l'utilisent. Inconvénient, lorsque l'on installe un logiciel, il faut installer toute sa suite avec, vérifier si les libs ne sont pas déjà en place, etc. et gérer les dépendances en cascades (tel logiciel à beosin de telle lib, qui elle même s'appuie sur une autre lib, qui à son tour a besoin deux trois libs de plus bas niveau, etc.).
  • # DLL/.so

    Posté par  . Évalué à 1.

    Petite précision pour ceux que ça intéresse :
    sous Unix, une bibliothéque dynamique est utilisée par plusieurs programmes
    en même temps. Le code machine n'est chargé qu'une seule fois, quelque soit
    le nombre de programmes qui en ont besoin. Sous Windows, le code est chargé autant de fois qu'il y a de programmes qui en ont besoin, c'est pas
    tout à fait pareil.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.