A volte vedo questi due termini essere usati in modo intercambiabile.
Qual è la differenza effettiva tra questi due termini? Come sono usati diversamente? Ci sono altre alternative a queste due librerie?
La libreria standard C fa parte del linguaggio di programmazione C, quindi è una specifica (scritto in inglese in alcune relazioni tecniche). Ad esempio, il n1570 documento sta spiegando cos'è malloc
e come dovrebbe comportarsi.
C'è anche un'altra specifica pertinente, la libreria C POSIX (che è più o meno un superset dello standard C biblioteca). Ad esempio, sia dlopen
che fork
sono specificati da POSIX (ma ignorati dallo standard C11).
La libreria GNU glibc è un'implementazione di (un superset della) libreria standard C e del C POSIX biblioteca. È un software gratuito (scritto principalmente in C per il dialetto GCC con un po 'di assemblatore ). Usa chiamate di sistema (elencate in syscalls (2) ) elaborati dal kernel . Potresti usare qualche altra implementazione della libreria standard C, come musl-libc (o dietlibc ).
Potresti evitare qualsiasi libc
e effettuare chiamate di sistema dirette al kernel scrivendo il codice assembler. Questo è raramente fatto (un esempio è il Bones Compilatore di schema o BusyBox ). La maggior parte dei programmi effettua chiamate di sistema tramite libc
e sfrutta le funzioni fornite da tale libc
. Quindi libc
è una pietra angolare dei sistemi Linux ...
A proposito, GNU glibc ha funzioni utili al di fuori dello standard, come ad esempio le funzioni di backtrace o altri modi per argomenti del programma di analisi .
Si noti che ci sono sottili differenze tra ciò che richiede lo standard e ciò che accade nella pratica (ad esempio, sovrascrittura della memoria interessa malloc
in un modo non standard o Linux dlopen
ha più flag di quello richiesto da POSIX ).
Le pagine man
su Linux in generale spiegano in che modo la conformità standard è una funzione. Cerca ad esempio in dlopen (3) .
Ogni implementazione di C deve fornire la libreria standard, ma non tutti i compilatori C sono scritti dalla FSF! Quindi il compilatore GNU C utilizzerà la libreria GNU C e il compilatore C di Intel utilizza una libreria standard diversa (con un nome meno accattivante). Entrambi saranno istanziazioni della libreria standard richiesta dallo standard C.
Se leggi "UNIX" per "GNU", per molto tempo i termini erano intercambiabili perché erano la stessa cosa.
Fino a quando BSD non è decollato, la libreria UNIX di AT & T era la libreria THE C - perché il compilatore era THE C (per la maggior parte).
Dopo BSD, allora avevi System V UNIX, BSD UNIX, GNU (GNU's Not Unix), e molto presto c'erano C compilatori ovunque, ognuno con la propria implementazione della libreria standard.
Leggi altre domande sui tag programming-languages c libraries standards gnu