Jeg ser noen ganger disse to begrepene brukes om hverandre.
Hva er den faktiske forskjellen mellom disse to begrepene? Hvordan brukes de annerledes? Er det noen andre alternativer til disse to bibliotekene?
Kommentarer
- Jeg antar at du har utført et søk på nettet før du spurte her. Hva fant du så langt? Hvordan svarer ikke informasjonen på spørsmålet ditt? Vennligst rediger spørsmålet for å vise innsatsen din, slik at svarene ikke ' ikke trenger å gjenta noe du allerede vet . Se også: Hvordan stiller jeg et godt spørsmål?
Svar
C-standardbiblioteket er en del av C-programmeringsspråket, så det er en spesifikasjon (skrevet på engelsk i noen teknisk rapport). For eksempel forklarer n1570 dokumentet hva som er malloc
og hvordan det skal oppføre seg.
Det er også en annen relevant spesifikasjon, C POSIX-biblioteket (som er mer eller mindre et supersett av C-standardbiblioteket). For eksempel er både dlopen
og fork
spesifisert av POSIX (men ignorert av C11-standarden).
GNU glibc bibliotek er en implementering av (et supersett av) C-standardbiblioteket og av C POSIX-biblioteket. Det er noe gratis programvare (for det meste skrevet i C for GCC-dialekten med litt assembler). Den bruker systemanrop (oppført i syscalls (2) ) behandlet av kjerne . Du kan bruke en annen implementering av C-standardbiblioteket, som musl-libc (eller dietlibc ).
Du kan unngå libc
og foreta direkte systemanrop til kjernen ved å skrive samlekoden. Dette gjøres sjelden (et eksempel er Bones Scheme-kompilatoren, eller BusyBox ). De fleste programmer gjør systemanrop gjennom libc
og benytter seg av funksjonene som tilbys av den libc
. Derfor er libc
en hjørnestein i Linux-systemer …
Forresten har GNU-glibc nyttige funksjoner utenfor standarden, slik som baksporingsfunksjoner , eller noen andre måter å analysere programargumenter .
Legg merke til at det er subtile forskjeller mellom hva standarden krever og hva som skjer i praksis (for eksempel minneoverforpliktelse påvirker malloc
på en ikke-standard måte, eller Linux dlopen
har flere flagg enn det POSIX krever).
Th man
sider på Linux generelt forklarer hvordan standardkonformitet er en funksjon. Se for eksempel i dlopen (3) .
Svar
Hver implementering av C må levere standardbiblioteket, men ikke alle C-kompilatorer er skrevet av FSF! Så GNU C-kompilatoren vil bruke GNU C-biblioteket, og Intels C-kompilator bruker et annet standardbibliotek (med et mindre fengende navn). Begge vil være instantiasjoner av standardbiblioteket som C-standarden krever.
Svar
Hvis du leser «UNIX» for «GNU», var ordene lenge utskiftbare fordi de var det samme.
Inntil BSD kom av banen var AT & T» s UNIX-bibliotek THE C-biblioteket – fordi kompilatoren deres var THE C-kompilatoren (for det meste).
Etter BSD hadde du System V UNIX, BSD UNIX, GNU (GNUs Not Unix), og ganske snart var det C-kompilatorer overalt, hver med sin egen implementering av standardbiblioteket.