94 votes

Quel est le rôle de libc(glibc) dans notre application linux ?

Lorsque nous déboguons un programme à l'aide de gdb Nous voyons généralement des fonctions avec des noms étranges définies dans la rubrique libc ( glibc ?). Mes questions sont les suivantes :

  1. Est libc/glibc l'implémentation standard de certaines fonctions C/C++ standard telles que strcpy , strlen , malloc ?
  2. Ou s'agit-il non seulement de la première utilisation décrite ci-dessus, mais aussi d'une enveloppe d'appels système Unix/Linux tels que open , close , fctl ? Si c'est le cas, pourquoi ne pouvons-nous pas émettre des appels syscall directement, sans avoir besoin de l'aide de la libc ?
  3. Fait libc n'est constitué que d'une seule lib ( .a o .so ), ou plusieurs fichiers lib (dans ce cas, libc est le nom général de cet ensemble de librairies) ? Où se trouve ce(s) fichier(s) de librairie ?
  4. Quelle est la différence entre libc y glibc ?

112voto

caf Points 114951

libc met en œuvre des fonctions C standard telles que strcpy() et les fonctions POSIX (qui peuvent être des appels système) comme getpid() . Notez que toutes les fonctions C standard ne sont pas dans libc - la plupart des fonctions mathématiques se trouvent dans libm .

Vous ne pouvez pas faire directement des appels au système de la même manière que vous appelez des fonctions normales parce que les appels au noyau ne sont pas des appels de fonctions normales et ne peuvent donc pas être résolus par l'éditeur de liens. Au lieu de cela, des morceaux de langage d'assemblage spécifiques à l'architecture sont utilisés pour appeler le noyau - vous pouvez bien sûr les écrire directement dans votre propre programme, mais vous n'avez pas besoin de le faire parce que libc les fournit pour vous.

Notez que sous Linux, c'est la combinaison du noyau et de l'interface utilisateur qui est à l'origine du projet. libc qui fournit l'API POSIX. libc ajoute une valeur décente - toutes les fonctions POSIX ne sont pas nécessairement des appels système, et pour celles qui le sont, le comportement du noyau n'est pas toujours conforme à POSIX.

libc est un fichier de bibliothèque unique (les deux .so y .a sont disponibles) et, dans la plupart des cas, réside dans le système /usr/lib . Cependant, le projet glibc (GNU libc) fournit plus que de simples libc - il fournit également le libm mentionnée plus haut, et d'autres bibliothèques de base comme libpthread . Ainsi libc n'est qu'une des bibliothèques fournies par la glibc - et il existe d'autres implémentations alternatives de libc autre que la glibc.

32voto

En ce qui concerne les deux premiers points, la glibc est à la fois la bibliothèque standard du langage C (par exemple, les "fonctions standard du langage C") et une enveloppe pour les appels système. Vous ne pouvez pas émettre des appels système directement parce que le compilateur ne sait pas comment le faire -- la glibc contient la "colle" nécessaire pour émettre des appels système, qui est écrite en langage assembleur. (Il est possible de réimplémenter cela soi-même, mais c'est beaucoup plus compliqué que cela n'en vaut la peine).

(La bibliothèque standard C++ est une chose distincte ; elle s'appelle libstdc++ .)

glibc n'est pas une simple .so (bibliothèque dynamique) -- il y en a plusieurs, mais libc et libm sont les deux plus couramment utilisés. Toutes les bibliothèques statiques et dynamiques sont stockées dans le fichier /lib .

libc est un terme générique utilisé pour désigner toutes les bibliothèques standard C - il en existe plusieurs. glibc est la plus couramment utilisée ; les autres comprennent eglibc, uclibc et dietlibc.

6voto

paulsm4 Points 39422

C'est la "bibliothèque standard". C'est exactement comme "MSVCRTL" dans le monde Windows.

La bibliothèque standard Gnu ("glibc") est l'implémentation de libc la plus couramment (presque universellement ?) trouvée sur les systèmes Linux. Voici les fichiers pertinents sur un vieux système Linux Suse :

ls -l /lib =>
-rwxr-xr-x  1 root root 1383527 2005-06-14 08:36 libc.so.6

ls -l /usr/lib =>
-rw-r--r--  1 root root 2580354 2005-06-14 08:20 libc.a
-rw-r--r--  1 root root     204 2005-06-14 08:20 libc.so

Ce lien devrait répondre à toutes les questions que vous pourriez vous poser (y compris les références au code source complet de GLibc) :

-2voto

Turgay Kale Points 9

Vous pouvez consulter les informations détaillées sur "libc" et "glibc" dans les pages de manuel de votre système Linux en tapant "man libc" dans l'interpréteur de commandes, copié comme ci-dessous ;

LIBC(7)      Linux Programmer's Manual      LIBC(7)   

NAME
       libc - overview of standard C libraries on Linux

DESCRIPTION
       The term "libc" is commonly used as a shorthand for the "standard C library", a library of standard functions that can be
       used by all C programs (and sometimes by programs in other languages).  Because of some history (see below), use  of  the
       term "libc" to refer to the standard C library is somewhat ambiguous on Linux.

   glibc
       By  far  the most widely used C library on Linux is the GNU C Library http://www.gnu.org/software/libc/, often referred
       to as glibc.  This is the C library that is nowadays used in all major Linux distributions.  It is  also  the  C  library
       whose details are documented in the relevant pages of the man-pages project (primarily in Section 3 of the manual).  Doc
       umentation of glibc is also available in the glibc manual, available via the command info libc.  Release 1.0 of glibc was
       made in September 1992.  (There were earlier 0.x releases.)  The next major release of glibc was 2.0, at the beginning of
       1997.

       The pathname /lib/libc.so.6 (or something similar) is normally a symbolic link that points to the location of  the  glibc
       library,  and executing this pathname will cause glibc to display various information about the version installed on your
       system.

   Linux libc
       In the early to mid 1990s, there was for a while Linux libc, a fork of glibc 1.x created by  Linux  developers  who  felt
       that  glibc  development  at  the  time  was  not  sufficing for the needs of Linux.  Often, this library was referred to
       (ambiguously) as just "libc".  Linux libc released major versions 2, 3, 4, and 5 (as well as many minor versions of those
       releases).  For a while, Linux libc was the standard C library in many Linux distributions.

       However, notwithstanding the original motivations of the Linux libc effort, by the time glibc 2.0 was released (in 1997),
       it was clearly superior to Linux libc, and all major Linux distributions that had been using  Linux  libc  soon  switched
       back to glibc.  Since this switch occurred long ago, man-pages no longer takes care to document Linux libc details.  Nev
       ertheless, the history is visible in vestiges of information about Linux libc that remain in some manual pages,  in  par
       ticular, references to libc4 and libc5.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X