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) .
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.