Cuando nos depuración de un programa mediante la gdb, a menudo vemos que las funciones con nombres extraños definido en libc(glibc?). Mis preguntas son:

  1. Es libc/glibc la implementación estándar de estándar de C/C++ funciones como strcpy,strlen,malloc?
  2. O, es que no sólo de la primera utilización, como se describe anteriormente, pero también un contenedor de Unix/Linux llamadas de sistema como open,close,fctl? Si es así, ¿por qué no podemos emitir llamadas al sistema directamente, sin libc?
  3. Hace libc constan solo de una lib (.a o .so) archivo, o muchos archivos lib (en este caso, libc es el nombre general de este conjunto de librerías)? Donde estas lib /los archivo(s) residir?
  4. ¿Cuál es la diferencia entre libc y glibc?

4 Comentarios

  1. 71

    libc implementa el estándar de funciones de C como strcpy() y las funciones POSIX (que pueden ser llamadas al sistema) como getpid(). Tenga en cuenta que no todas las funciones estándar de C están en libc – la mayoría de las funciones matemáticas están en libm.

    Directamente no se puede hacer llamadas al sistema de la misma manera que llame a las funciones normales porque las llamadas al kernel no son normales las llamadas a la función, por lo que no puede ser resuelto por el enlazador. En su lugar, de una arquitectura específica de lenguaje de ensamblaje de los procesadores se utilizan para llamar en el kernel – por supuesto, usted puede escribir directamente en su propio programa, pero no es necesario porque libc les ofrece para usted.

    Tenga en cuenta que en Linux es la combinación del núcleo y libc que proporciona la API POSIX. libc agrega una cantidad decente de valor – no todos los POSIX función es necesariamente una llamada al sistema, y para los que están en el núcleo de comportamiento no siempre POSIX conformes.

    libc es un solo archivo de biblioteca (tanto .so y .a versiones están disponibles) y en la mayoría de los casos reside en /usr/lib. Sin embargo, la glibc (libc de GNU) proyecto ofrece más que sólo libc – también proporciona la libm se mencionó anteriormente, y otras bibliotecas del núcleo como libpthread. Así libc es sólo una de las bibliotecas proporcionadas por glibc – y hay otra alternativa implementaciones de libc otros de glibc.

  2. 18

    Con respecto a los dos primeros, glibc es tanto la biblioteca estándar de C (e.g, «estándar de funciones de C») y un contenedor para las llamadas al sistema. Usted no puede emitir llamadas al sistema directamente, ya que el compilador no sabe cómo-glibc contiene el «pegamento» que es necesario para la emisión de llamadas al sistema, que está escrito en la asamblea. (Es posible que vuelva a implementar esto, pero es mucho más problemas de lo que vale.)

    (El estándar de C++ biblioteca es una cosa distinta; se llama libstdc++.)

    glibc no es una sola .so (biblioteca dinámica) archivo — hay un montón, pero libc y libm son el más comúnmente utilizado dos. Todas las bibliotecas estáticas y dinámicas son almacenados en /lib.

    libc es un término genérico utilizado para referirse a todas las bibliotecas estándar de C — hay varios. glibc es el más comúnmente utilizado; otros incluyen eglibc, uclibc, y dietlibc.

  3. 3

    Es el «estándar» de la biblioteca. Es exactamente igual que «MSVCRTL» en el mundo de Windows.

    El estándar de Gnu library («glibc») es la implementación de la libc de mayor frecuencia (casi universalmente?) se encuentran en los sistemas Linux. Aquí están los archivos relevantes en un viejo sistema SusE Linux:

    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

    Este vínculo debe responder a cualquier pregunta adicional que pueda tener (incluyendo referencias a la plena y completa de GLibc código fuente):

  4. -1

    Usted puede comprobar la información detallada acerca de «libc» y «glibc» en las páginas man en su sistema linux escribiendo «el hombre libc» en la shell, copia de la siguiente manera;

    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.
    • Que es un hombre de la página! Me gustaría como el que solicitan la diferencia bettween libc y glibc .. el que debo usar y como … si hay una referencia de tiempo de ejecución de … cual es el mejor para la industria …

Dejar respuesta

Please enter your comment!
Please enter your name here