A veces veo que estos dos términos se usan indistintamente.
¿Cuál es la diferencia real entre estos dos términos? ¿Cómo se usan de manera diferente? ¿Hay otras alternativas a estas dos bibliotecas?
Comentarios
- Supongo que ha realizado una búsqueda en línea antes de preguntar aquí. ¿Qué encontraste hasta ahora? ¿Cómo esa información no responde a su pregunta? edita la pregunta para mostrar tu esfuerzo, de modo que las respuestas no ' tengan que repetir algo que ya sabes. . Consulte también: ¿Cómo hago una buena pregunta?
Responder
La biblioteca estándar C es parte del lenguaje de programación C, por lo que es una especificación (escrita en inglés en algún informe técnico). Por ejemplo, el documento n1570 explica qué es malloc
y cómo debe comportarse.
También hay otra especificación relevante, la biblioteca C POSIX (que es más o menos un superconjunto de la biblioteca estándar C). Por ejemplo, tanto dlopen
como fork
están especificados por POSIX (pero ignorados por el estándar C11).
El GNU La biblioteca glibc es una implementación de (un superconjunto de) la biblioteca estándar C y de la biblioteca C POSIX. Es algo de software libre (principalmente escrito en C para el dialecto GCC con un poco de ensamblador). Utiliza llamadas al sistema (enumeradas en syscalls (2) ) procesadas por kernel . Podría utilizar alguna otra implementación de la biblioteca estándar de C, como musl-libc (o dietlibc ).
Puede evitar cualquier libc
y realizar llamadas directas al sistema al núcleo escribiendo código ensamblador. Esto rara vez se hace (un ejemplo es el compilador de esquema Bones o BusyBox ). La mayoría de los programas realizan llamadas al sistema a través de libc
y aprovechan las funciones proporcionadas por ese libc
. Por tanto, libc
es una piedra angular de los sistemas Linux …
Por cierto, GNU glibc tiene funciones útiles fuera del estándar, como como funciones backtrace , o algunas formas adicionales de analizar los argumentos del programa .
Observe que existen diferencias sutiles entre lo que requiere el estándar y lo que sucede en la práctica (por ejemplo, sobrecompromiso de memoria afecta malloc
de una manera no estándar, o Linux dlopen
tiene más indicadores de los que requiere POSIX ).
Las páginas man
en Linux en general explican cómo la conformidad estándar es una función. Busque por ejemplo en dlopen (3) .
Responder
Cada implementación de C tiene que suministrar la biblioteca estándar, ¡pero no todos los compiladores de C están escritos por la FSF! Entonces, el compilador GNU C usará la biblioteca GNU C, y el compilador C de Intel usa una biblioteca estándar diferente (con un nombre menos llamativo). Ambos serán instancias de la biblioteca estándar que requiere el estándar C.
Respuesta
Si lees «UNIX» para «GNU», durante mucho tiempo los términos fueron intercambiables porque eran la misma cosa.
Hasta que BSD despegó, la biblioteca de UNIX de AT & T era LA biblioteca C, porque su compilador era EL compilador C (en su mayor parte).
Después de BSD, tenía System V UNIX, BSD UNIX, GNU (GNU no Unix), y muy pronto hubo compiladores C en todas partes, cada uno con su propia implementación de la biblioteca estándar.