Néha úgy látom, hogy ezt a két kifejezést felváltva használják.
Mi a tényleges különbség e két kifejezés között? Hogyan használják őket másképp? Van-e más alternatíva ennek a két könyvtárnak?
Megjegyzések
- Feltételezem, hogy online keresést hajtott végre, mielőtt ide kérdezne. Mit talált eddig? Hogy ezek az információk nem válaszolnak a kérdésére? Kérjük, szerkessze a kérdést, hogy megmutassa erőfeszítéseit, hogy a válaszok ne ' ne ismételjenek meg valamit, amit már tudsz . Lásd még: Hogyan tegyek fel jó kérdést?
Válasz
A C standard könyvtár a C programozási nyelv része, tehát specifikáció (írott angolul valamilyen technikai jelentésben). Például a n1570 dokumentum elmagyarázza, mi az a malloc
, és hogyan kell viselkednie.
Van még egy releváns specifikáció, a C POSIX könyvtár (ami nagyjából a C szabványos könyvtár szuperhalmaza). Például a dlopen
és az fork
elemeket is a POSIX határozza meg (de a C11 szabvány nem veszi figyelembe).
A GNU A glibc könyvtár a C szabványos könyvtár és a C POSIX könyvtár (egy túlhalmaza) megvalósítása. Ez egy ingyenes szoftver (többnyire C-ben írva CC-dialektus hoz, egy kis összeállítóval). rendszerhívásokat használ (amelyek fel vannak sorolva az rendszerhívásokban (2) ), amelyeket a kernel . Használhatja a C szabványos könyvtár más megvalósítását, például a musl-libc (vagy a dietlibc ).
Elkerülheti az esetleges libc
eseteket, és közvetlen rendszerhívásokat kezdeményezhet a kernel számára az assembler kód megírásával. Erre ritkán kerül sor (például a Bones séma fordítója vagy a BusyBox ). A legtöbb program rendszerhívásokat hajt végre a libc
segítségével, és kihasználja az libc
által biztosított funkciókat. Ezért a libc
a Linux rendszerek sarokköve …
Egyébként a GNU glibc a szabványon kívül hasznos funkciókkal is rendelkezik, ilyenek mint backtrace függvények , vagy néhány további módszer a program argumentumainak elemzésére .
Figyelje meg, hogy finom különbségek vannak a szabvány által megköveteltek és a gyakorlatban bekövetkező események között (például a memória túlkötelezettség hatással van a malloc
nem szabványos módon, vagy a Linux dlopen
több zászlóval rendelkezik, mint amire a POSIX szükséges).
A Th man
oldalak Linux rendszeren általában elmagyarázzák, hogy a szabványnak való megfelelés hogyan függvény. Keresse meg például a dlopen (3) cikket.
Válasz
A C minden megvalósításának meg kell adnia a standard könyvtárat, de nem minden C fordítót ír az FSF! Tehát a GNU C fordító a GNU C könyvtárat fogja használni, az Intel C fordítója pedig egy másik standard könyvtárat használ (kevésbé fülbemászó névvel). Mindkettő a standard könyvtár példánya, amelyet a C szabvány megkövetel.
Válasz
Ha a “UNIX” szót olvassa a “GNU” kifejezésre, akkor a kifejezések sokáig felcserélhetők voltak, mert ugyanazok voltak.
Amíg a BSD le nem szállt, az AT & T UNIX könyvtár THE C könyvtár volt – mert a fordítójuk A C fordító (javarészt).
A BSD után megvan a System V UNIX, a BSD UNIX, a GNU (a GNU nem Unix), és hamarosan C fordítók is voltak mindenhol, mindegyik saját szabványos könyvtár megvalósítással.