Qual è in realtà la differenza tra la libreria GNU C e la libreria standard C?

0

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?

    
posta yoyo_fun 23.10.2017 - 13:55
fonte

3 risposte

17

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) .

Vedi anche libc (7) e vdso(7) .

    
risposta data 23.10.2017 - 13:58
fonte
1

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.

    
risposta data 23.10.2017 - 13:59
fonte
0

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.

    
risposta data 17.12.2017 - 16:54
fonte

Leggi altre domande sui tag