Czasami widzę, że te dwa terminy są używane zamiennie.
Jaka jest rzeczywista różnica między tymi dwoma terminami? W jaki sposób są one używane inaczej? Czy są jakieś inne alternatywy dla tych dwóch bibliotek?
Komentarze
- Zakładam, że przed zapytaniem tutaj wykonałeś wyszukiwanie online. Co do tej pory znalazłeś? Jak te informacje nie odpowiadają na Twoje pytanie? edytuj pytanie, aby pokazać swój wysiłek, aby odpowiedzi nie ' nie musiały powtarzać czegoś, co już wiesz . Zobacz też: Jak zadać dobre pytanie?
Odpowiedź
Standardowa biblioteka C jest częścią języka programowania C, więc jest specyfikacją (napisaną w języku angielskim w jakimś raporcie technicznym). Na przykład dokument n1570 wyjaśnia, czym jest malloc
i jak powinien się zachowywać.
Istnieje również inna istotna specyfikacja, biblioteka C POSIX (która jest mniej więcej nadzbiorem biblioteki standardowej C). Na przykład zarówno dlopen
, jak i fork
są określone przez POSIX (ale ignorowane przez standard C11).
GNU Biblioteka glibc jest implementacją (nadzbiór) biblioteki standardowej C i biblioteki C POSIX. Jest to jakieś wolne oprogramowanie (głównie napisane w C dla dialektu GCC z odrobiną asemblera). Wykorzystuje wywołania systemowe (wymienione w syscalls (2) ) przetwarzane przez jądro . Możesz użyć innej implementacji standardowej biblioteki C, na przykład musl-libc (lub dietlibc ).
Możesz uniknąć libc
i wykonywać bezpośrednie wywołania systemowe do jądra, pisząc kod asemblera. Rzadko się to zdarza (przykładem jest kompilator schematów Bones lub BusyBox ). Większość programów wykonuje wywołania systemowe za pośrednictwem libc
i korzysta z funkcji zapewnianych przez libc
. Dlatego libc
jest kamieniem węgielnym systemów Linux …
Nawiasem mówiąc, GNU glibc ma użyteczne funkcje poza standardem, takie jak jako funkcje śledzenia wstecznego lub dodatkowe sposoby analizowania argumentów programu .
Zauważ, że istnieją subtelne różnice między tym, czego wymaga norma, a tym, co dzieje się w praktyce (na przykład przeciążenie pamięci wpływa na malloc
w niestandardowy sposób lub Linux dlopen
ma więcej flag niż wymaga POSIX ).
Strony man
dotyczące Linuksa ogólnie wyjaśniają, w jaki sposób funkcja zgodna ze standardami jest funkcją. Poszukaj na przykład w dlopen (3) .
Odpowiedź
Każda implementacja C musi dostarczać bibliotekę standardową, ale nie każdy kompilator C jest napisany przez FSF! Zatem kompilator GNU C użyje biblioteki GNU C, a kompilator C Intela używa innej biblioteki standardowej (z mniej chwytliwą nazwą). Obydwie będą instancjami standardowej biblioteki wymaganej przez standard C.
Odpowiedź
Jeśli przeczytasz „UNIX” zamiast „GNU”, przez długi czas terminy były zamienne, ponieważ były tym samym.
Dopóki BSD nie ruszyło z ziemi, biblioteka AT & T „była THE biblioteką C – ponieważ ich kompilator był Kompilator C (w większości).
Po BSD miałeś System V UNIX, BSD UNIX, GNU (GNU „to nie Unix), a wkrótce pojawiły się kompilatory C wszędzie, każdy z własną implementacją biblioteki standardowej.