Jag ser ibland att dessa två termer används omväxlande.
Vad är den faktiska skillnaden mellan dessa två termer? Hur används de annorlunda? Finns det några andra alternativ till dessa två bibliotek?
Kommentarer
- Jag antar att du har gjort en online-sökning innan du frågar här. Vad hittade du hittills? Hur svarar den informationen inte på din fråga? Vänligen redigera frågan för att visa din ansträngning så att svaren inte behöver ' t måste upprepa något du redan vet . Se även: Hur ställer jag en bra fråga?
Svar
C-standardbiblioteket är en del av C-programmeringsspråket, så det är en specifikation (skriven på engelska i någon teknisk rapport). Dokumentet n1570 förklarar till exempel vad som är malloc
och hur det ska bete sig.
Det finns också en annan relevant specifikation, C POSIX-biblioteket (vilket är mer eller mindre en överuppsättning av C-standardbiblioteket). Till exempel specificeras både dlopen
och fork
av POSIX (men ignoreras av C11-standarden).
GNU glibc -biblioteket är en implementering av (en superset av) C-standardbiblioteket och C POSIX-biblioteket. Det är en del fri programvara (mestadels skriven i C för GCC-dialekten med lite monterare). Den använder systemanrop (listad i syscalls (2) ) bearbetad av kärna . Du kan använda någon annan implementering av C-standardbiblioteket, som musl-libc (eller dietlibc ).
Du kan undvika alla libc
och ringa direkta systemanrop till kärnan genom att skriva sammansättningskod. Detta görs sällan (ett exempel är Bones Scheme compiler, eller BusyBox ). De flesta program gör systemanrop genom libc
och utnyttjar funktionerna som tillhandahålls av den libc
. Därför är libc
en hörnsten i Linux-system …
GNU-glibc har förresten användbara funktioner utanför standarden, t.ex. som backtrace-funktioner , eller några ytterligare sätt att analysera programargument .
Observera att det finns subtila skillnader mellan vad standarden kräver och vad som händer i praktiken (till exempel minnesöverdrivning påverkar malloc
på ett icke-standardiserat sätt, eller så har Linux dlopen
fler flaggor än vad POSIX kräver).
Th man
sidor på Linux i allmänhet förklarar hur standardkonformitet är en funktion. Se till exempel i dlopen (3) .
Svar
Varje implementering av C måste leverera standardbiblioteket, men inte alla C-kompilatorer är skrivna av FSF! Så GNU C-kompilatorn använder GNU C-biblioteket, och Intels C-kompilator använder ett annat standardbibliotek (med ett mindre fängslande namn). Båda kommer att vara instanser av standardbiblioteket som C-standarden kräver.
Svar
Om du läser ”UNIX” för ”GNU” var termerna länge utbytbara eftersom de var samma sak.
Tills BSD kom av marken var AT & T” s UNIX-bibliotek THE C-biblioteket – eftersom deras kompilator var THE C-kompilatorn (för det mesta).
Efter BSD hade du System V UNIX, BSD UNIX, GNU (GNUs Not Unix), och ganska snart fanns det C-kompilatorer överallt, var och en med sin egen implementering av standardbiblioteket.