Prečo je glibc udržiavaný oddelene od GCC
GCC je kompilátor C. Glibc je knižnica C. Nie je však úplne nevyhnutné, aby kompilátor a štandardná knižnica boli dodávané ako implementácia jazyka C.?

Napríklad knižnica C obsahuje ABI a veci špecifické pre kompilátor
Jedným z dôvodov je, že GCC je možné vytvoriť a použiť v systémoch s ich vlastnou štandardnou knižnicou C (napr. Proprietárne systémy Unix ako MacOSX, Solaris, HPUX alebo niektoré systémy FreeBSD). .
Aj v systéme Linux môžete mať štandardnú knižnicu C, ktorá nie je GNU Glibc. Najmä môžete vytvoriť (alebo použiť) GCC na systémoch Linux s musl-libc alebo s Bionic (systémy Android) alebo s dietlibc atď. Systém Linux môže mať GNU Glibc a používať iný kompilátor jazyka C (napríklad Clang alebo TinyCC).
Okrem toho je knižnica C silne závislá na jadre Linuxu. Niektoré staré verzie jadra môžu vyžadovať určitý typ (alebo verziu) libc
A podrobnosti ako „ako zavolať hlavnú funkciu“ závisia aj od prekladača, ale tieto podrobnosti v skutočnosti poskytuje libc.so systému Linux .
Nie je to úplne správne. Hlavná funkcia sa volá (v hostenom prostredí) z obsahu crt0, z ktorých niektoré poskytuje GCC (napr. /Usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o v mojom Debiane/Sid/x86-64 je z balíka libgcc-6-dev). Prečítajte si tiež o libgcc
V skutočnosti existuje čiastočne skrytý vzťah medzi libc a GCC, napr. B. pretože veľa hlavičiek libc (voliteľné) používa niektoré vstavané alebo funkčné atribúty GCC .
(Preto vývojári GCC a vývojári GNU libc musia interagovať.)
. keď zmením kompilátor na prácu s iným ABI .
Musíte./configure nainštaluje a prebuduje kompilátor GCC a možno budete musieť patchovať kompilátor GCC (na opísanie vašich ABI a konvencií volaní). Dobrým príkladom je x32 ABI.
Nakoniec niektorí prispievatelia alebo správcovia GCC (vrátane mňa) podpísali oznámenie o autorských právach, ktoré sa týka GCC, ale nie GNU glibc .
(Pokiaľ ide o licenciu GCC, pozorne si prečítajte výnimku runtime knižnice GCC.)
Upozorňujeme, že niektoré štandardné hlavičky, ako napr alebo poskytnuté GCC. iné, napríklad napríklad, sú „opravené“ počas vytvárania GCC: postup zostavovania kompilátora ich preberá z implementácie libc a opravuje ich. Ostatné štandardné hlavičky (pravdepodobne a interné hlavičky, ktoré obsahujú) pochádzajú z libc. Prečítajte si viac o GCC FIXINCLUDES a opravených hlavičkových súboroch .
(Oprava spočíva v niečom, čomu ja (Basile) stále veľmi nerozumiem.)
Dalo by sa skompilovať s gcc -v -H, aby ste lepšie pochopili, aké aktuálne programy bežia (pretože gcc je ovládač, ktorý spúšťa kompilátor cc1, linkery ld & collect2, ako assembler atď.) a ktoré hlavičky sú zahrnuté, ktoré knižnice a súbory objektov sú prepojené (momentálne) implicitne, vrátane štandardnej knižnice C a crt0). Viac informácií o možnostiach GCC .
Mimochodom, môžete použiť štandardnú knižnicu C, ktorá sa líši od toho, čo vaša GCC očakáva alebo pre ktorú bola vytvorená (napr. Musl-libc alebo knižnica diét), pričom na vytvorenie gcc obídete príslušné ďalšie argumenty. .