De ce se menține glibc separat de GCC
GCC este compilatorul C. Glibc este biblioteca C. Cu toate acestea, nu este esențial ca un compilator și biblioteca standard să fie incluse ca implementare C.?

De exemplu, biblioteca C conține ABI și lucruri specifice compilatorului, cum ar fi
Unul dintre motive este că GCC poate fi construit și utilizat pe sisteme cu propria lor bibliotecă standard C (de exemplu, sisteme proprietare Unix precum MacOSX, Solaris, HPUX sau unele sisteme FreeBSD) .
Chiar și pe Linux, puteți avea o bibliotecă C standard care nu este GNU Glibc. În special, puteți crea (sau utiliza) GCC pe sisteme Linux cu musl-libc sau cu Bionic (sisteme Android) sau cu dietlibc etc. Un sistem Linux ar putea avea GNU Glibc și ar putea folosi un compilator C diferit (cum ar fi Clang sau TinyCC).
În plus, biblioteca C depinde în mare măsură de nucleul Linux. Unele versiuni vechi ale nucleului pot necesita un anumit tip (sau versiune) de libc
Și detalii precum „Cum se apelează o funcție principală” depind și de compilator, dar de fapt aceste detalii sunt furnizate de libc.so unui sistem Linux .
Nu este tocmai corect. Funcția principală este numită (într-un mediu găzduit) din chestii crt0 dintre care unele sunt furnizate de GCC (de exemplu /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o pe Debian-ul meu/Sid/x86-64 provine din pachetul libgcc-6-dev). Citiți și despre libgcc
De fapt, există o relație semi-ascunsă între libc și GCC, de ex. B. deoarece multe antete libc (opționale) folosesc unele elemente integrate GCC sau atribute funcționale .
(Prin urmare, dezvoltatorii GCC și dezvoltatorii GNU libc trebuie să interacționeze.)
. când schimb compilatorul pentru a lucra cu un alt ABI .
Trebuie să ./configure va instala și reconstrui compilatorul GCC și poate fi necesar chiar să corecți compilatorul GCC (pentru a descrie ABI și convențiile de apelare). X32 ABI este un bun exemplu.
În cele din urmă, unii dintre colaboratorii sau întreținătorii GCC (inclusiv eu) au semnat o notificare privind drepturile de autor care acoperă GCC, dar nu glibc-ul GNU .
(Pentru licența GCC, citiți cu atenție excepția bibliotecii Runtime GCC.)
Rețineți că unele anteturi standard, cum ar fi sau furnizate de GCC. altele, cum ar fi de exemplu, sunt „fixate” în timpul compilării GCC: procedura de compilare a compilatorului le ia din implementarea libc și le corectează. Alte anteturi standard (probabil și anteturile interne pe care le conțin) provin de la libc. Citiți mai multe despre GCC FIXINCLUDES și fișiere de antet fixe .
(Problema cu soluția implică ceva ce eu (Basile) încă nu înțeleg prea bine.)
Puteți compila cu gcc -v -H pentru a înțelege mai bine ce programe rulează (deoarece gcc este un driver care rulează compilatorul cc1, linkere ld & collect2, ca asamblor etc.) și care anteturi sunt incluse, ce biblioteci și fișiere obiect sunt legate (în prezent) implicit, inclusiv biblioteca standard C și crt0). Mai multe informații despre opțiunile GCC .
De altfel, puteți utiliza o bibliotecă C standard care este diferită de cea pe care o așteaptă GCC sau pentru care a fost creată (de exemplu, musl-libc sau o bibliotecă dietetică), ocolind argumentele suplimentare adecvate pentru a face gcc .