Soms zie ik dat deze twee termen door elkaar worden gebruikt.

Wat is het werkelijke verschil tussen deze twee termen? Hoe worden ze anders gebruikt? Zijn er nog andere alternatieven voor deze twee bibliotheken?

Opmerkingen

  • Ik neem aan dat je een online zoekopdracht hebt uitgevoerd voordat je hiernaar vraagt. Wat heb je tot nu toe gevonden? Hoe beantwoordt die informatie uw vraag niet? bewerk de vraag om uw inspanning te tonen, zodat de antwoorden niet ' hoeven te herhalen wat u al weet . Zie ook: Hoe stel ik een goede vraag?

Antwoord

De C-standaardbibliotheek maakt deel uit van de C-programmeertaal, dus het is een specificatie (geschreven in het Engels in een technisch rapport). Het n1570 document legt bijvoorbeeld uit wat malloc is en hoe het zich zou moeten gedragen.

Er is ook een andere relevante specificatie, de C POSIX-bibliotheek (die min of meer een superset is van de C-standaardbibliotheek). Zowel dlopen en fork worden bijvoorbeeld gespecificeerd door POSIX (maar genegeerd door de C11-standaard).

De GNU glibc -bibliotheek is een implementatie van (een superset van) de C-standaardbibliotheek en van de C POSIX-bibliotheek. Het is enige gratis software (meestal geschreven in C voor het GCC-dialect met een beetje assembler). Het gebruikt systeemoproepen (vermeld in syscalls (2) ) verwerkt door de kernel . Je zou een andere implementatie van de C-standaardbibliotheek kunnen gebruiken, zoals musl-libc (of dietlibc ).

Je zou elke libc kunnen vermijden en directe systeemaanroepen naar de kernel kunnen doen door assembler code te schrijven. Dit wordt zelden gedaan (een voorbeeld is de Bones Scheme compiler, of BusyBox ). De meeste programmas doen systeemaanroepen via de libc en profiteren van de functies die worden geboden door libc. Daarom is libc een hoeksteen van Linux-systemen …

Overigens heeft de GNU glibc handige functies buiten de standaard, zoals als backtrace-functies , of enkele aanvullende manieren om programmaargumenten te parseren .

Merk op dat er subtiele verschillen zijn tussen wat de standaard vereist en wat er in de praktijk gebeurt ( geheugenovercommitment is bijvoorbeeld van invloed op malloc op een niet-standaard manier, of Linux dlopen heeft meer vlaggen dan wat POSIX vereist).

De man paginas op Linux leggen in het algemeen uit hoe standaard conformeren een functie is. Zoek bijvoorbeeld in dlopen (3) .

Zie ook libc (7) en vdso (7) .

Antwoord

Elke implementatie van C moet de standaardbibliotheek leveren, maar niet elke C-compiler is geschreven door de FSF! Dus de GNU C-compiler gebruikt de GNU C-bibliotheek, en de C-compiler van Intel gebruikt een andere standaardbibliotheek (met een minder pakkende naam). Beide zullen instantiaties zijn van de standaardbibliotheek die de C-standaard vereist.

Answer

Als je “UNIX” leest voor “GNU”, waren de termen lange tijd onderling uitwisselbaar omdat ze hetzelfde waren.

Tot BSD van de grond kwam, was de UNIX-bibliotheek van AT & T DE C-bibliotheek – omdat hun compiler DE C-compiler (voor het grootste deel).

Na BSD, toen had je System V UNIX, BSD UNIX, GNU (GNUs Not Unix), en al snel waren er C-compilers overal, elk met hun eigen implementatie van de standaardbibliotheek.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *