Někdy vidím, že tyto dva pojmy jsou zaměnitelné.

Jaký je skutečný rozdíl mezi těmito dvěma pojmy? Jak se používají odlišně? Existují nějaké jiné alternativy k těmto dvěma knihovnám?

Komentáře

  • Předpokládám, že jste provedli online vyhledávání, než se zeptáte zde. Co jsi zatím našel? Jak tyto informace neodpovídají na vaši otázku? Upravte otázku, abyste projevili své úsilí, aby odpovědi ' nemuseli opakovat něco, co už znáte . Viz také: Jak mohu položit dobrou otázku?

Odpovědět

standardní knihovna C je součástí programovacího jazyka C, jedná se tedy o specifikaci (písemné v angličtině v nějaké technické zprávě). Například dokument n1570 vysvětluje, co je malloc a jak by se měl chovat.

Existuje také další relevantní specifikace, knihovna C POSIX (která je víceméně nadmnožinou standardní knihovny C). Například dlopen a fork jsou specifikovány POSIXem (ale ignorovány standardem C11).

GNU Knihovna glibc je implementací (nadmnožiny) standardní knihovny C a knihovny C POSIX. Je to nějaký bezplatný software (většinou napsaný v jazyce C pro dialekt GCC s trochou assembleru). Využívá systémová volání (uvedená v syscalls (2) ) zpracovaná jádro . Můžete použít jinou implementaci standardní knihovny C, například musl-libc (nebo dietlibc ).

Dalo by se vyhnout jakémukoli libc a uskutečňovat přímá systémová volání jádra psaním kódu assembleru. To se dělá jen zřídka (příkladem je kompilátor schématu Bones nebo BusyBox ). Většina programů provádí systémová volání prostřednictvím libc a využívá výhod funkcí poskytovaných tímto libc. libc je tedy základním kamenem systémů Linux …

Mimochodem, GNU glibc má mimo standard užitečné užitečné funkce, například jako funkce backtrace nebo některé další způsoby analyzovat argumenty programu .

Všimněte si, že existují jemné rozdíly mezi tím, co standard vyžaduje, a tím, co se děje v praxi (například nadměrné zaplnění paměti ovlivňuje malloc nestandardním způsobem nebo Linux dlopen má více příznaků, než POSIX vyžaduje).

Th man stránky v systému Linux obecně vysvětlují, jak je standardní přizpůsobení funkcí. Podívejte se například na dlopen (3) .

Viz také libc (7) a vdso (7) .

Odpověď

Každá implementace C musí dodávat standardní knihovnu, ale ne každý kompilátor C je napsán FSF! Kompilátor GNU C bude tedy používat knihovnu GNU C a kompilátor C společnosti Intel používá jinou standardní knihovnu (s méně chytlavým názvem). Oba budou instance standardní knihovny, kterou standard C vyžaduje.

Odpověď

Pokud čtete „UNIX“ pro „GNU“, byly termíny po dlouhou dobu zaměnitelné, protože šlo o totéž.

Dokud se BSD nedostala na zem, byla AT & T UNIX knihovna THE C knihovna – protože jejich kompilátor byl Kompilátor C (z větší části).

Po BSD jste měli System V UNIX, BSD UNIX, GNU (GNU není Unix) a brzy tam byli kompilátoři C všude, každý s vlastní implementací standardní knihovny.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *