Às vezes, vejo esses dois termos serem usados de forma intercambiável.
Qual é a diferença real entre esses dois termos? Como eles são usados de forma diferente? Existem outras alternativas para essas duas bibliotecas?
Comentários
- Suponho que você tenha feito uma pesquisa online antes de perguntar aqui. O que você encontrou até agora? Como essa informação não responde à sua pergunta? edite a pergunta para mostrar seu esforço, de modo que as respostas não ' precisem repetir algo que você já conhece . Veja também: Como faço uma boa pergunta?
Resposta
A biblioteca padrão C faz parte da linguagem de programação C, portanto é uma especificação (escrita em inglês em algum relatório técnico). Por exemplo, o documento n1570 explica o que é malloc
e como deve se comportar.
Há também outra especificação relevante, a biblioteca C POSIX (que é mais ou menos um superconjunto da biblioteca padrão C). Por exemplo, dlopen
e fork
são especificados por POSIX (mas ignorados pelo padrão C11).
O GNU A biblioteca glibc é uma implementação de (um superconjunto) da biblioteca padrão C e da biblioteca C POSIX. É algum software livre (escrito principalmente em C para o dialeto GCC com um pouco de assembler). Ele usa chamadas do sistema (listadas em syscalls (2) ) processadas pelo kernel . Você pode usar alguma outra implementação da biblioteca padrão C, como musl-libc (ou dietlibc ).
Você pode evitar qualquer libc
e fazer chamadas de sistema diretas para o kernel escrevendo código assembler. Isso raramente é feito (um exemplo é o compilador de esquema Bones ou BusyBox ). A maioria dos programas faz chamadas de sistema por meio de libc
e aproveita as funções fornecidas por esse libc
. Portanto, libc
é a pedra angular dos sistemas Linux …
A propósito, o GNU glibc tem funções úteis fora do padrão, como como funções de backtrace ou algumas maneiras adicionais de analisar argumentos do programa .
Observe que há diferenças sutis entre o que o padrão exige e o que acontece na prática (por exemplo, supercomprometimento de memória afeta malloc
de uma forma não padrão ou Linux dlopen
tem mais sinalizadores do que o POSIX requer).
As man
páginas no Linux em geral explicam como a conformidade com o padrão é uma função. Procure por exemplo em dlopen (3) .
Resposta
Cada implementação de C deve fornecer a biblioteca padrão, mas nem todo compilador C é escrito pela FSF! Portanto, o compilador GNU C usará a biblioteca GNU C, e o compilador C da Intel usa uma biblioteca padrão diferente (com um nome menos atraente). Ambos serão instanciações da biblioteca padrão que o padrão C requer.
Resposta
Se você leu “UNIX” para “GNU”, por muito tempo os termos foram intercambiáveis porque eram a mesma coisa.
Até o BSD decolar, a biblioteca UNIX da AT & T “T era A biblioteca C – porque seu compilador era O compilador C (na maior parte).
Depois do BSD, você tinha o System V UNIX, o BSD UNIX, o GNU (GNU não é Unix) e logo surgiram os compiladores C em todos os lugares, cada um com sua própria implementação da biblioteca padrão.