Чому glibc підтримується окремо від GCC
GCC є компілятором C. Glibc - це бібліотека C. Однак не є абсолютно необхідним, щоб компілятор та стандартна бібліотека входили до складу реалізації C.?

Наприклад, бібліотека C містить ABI та особливості компілятора, такі як
Однією з причин є те, що GCC можна будувати та використовувати в системах із власною стандартною бібліотекою C (наприклад, власні системи Unix, такі як MacOSX, Solaris, HPUX або деякі системи FreeBSD) .
Навіть у Linux ви можете мати стандартну бібліотеку C, яка не є GNU Glibc. Зокрема, ви можете створити (або використовувати) GCC в системах Linux з musl-libc або з Bionic (системи Android) або з dietlibc тощо. Система Linux може мати GNU Glibc і використовувати інший компілятор C (наприклад, Clang або TinyCC).
Крім того, бібліотека C сильно залежить від ядра Linux. Деякі старі версії ядра можуть вимагати певного типу (або версії) libc
І такі деталі, як "як викликати основну функцію", також залежать від компілятора, але насправді ці деталі надаються libc.so до системи Linux .
Це не зовсім правильно. Основна функція викликається (у розміщеному середовищі) з матеріалів crt0, деякі з яких надаються GCC (наприклад, /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o на моєму Debian/Sid/x86-64 із пакунку libgcc-6-dev). Також прочитайте про libgcc
Насправді між libc та GCC існує напівприхований взаємозв'язок, напр. Б., оскільки багато заголовків libc (необов’язково) використовують деякі вбудовані GCC або атрибути функції .
(Отже, розробники GCC та розробники GNU libc повинні взаємодіяти.)
. коли я зміню компілятор для роботи з іншим ABI .
Тобі потрібно ./configure встановить та відновить компілятор GCC, і, можливо, вам доведеться навіть виправити компілятор GCC (щоб описати ваші правила ABI та виклики). Хорошим прикладом є x32 ABI.
Нарешті, деякі учасники GCC та супровідники (включаючи мене самого) підписали повідомлення про авторські права, яке охоплює GCC, але не glibc GNU .
(Для ліцензії GCC уважно прочитайте виняток бібліотеки середовища виконання GCC.)
Зверніть увагу, що деякі стандартні заголовки, такі як або надані GCC. інші, такі як, наприклад, "виправляються" під час побудови GCC: процедура побудови компілятора бере їх із реалізації libc та виправляє. Інші стандартні заголовки (можливо, і внутрішні заголовки, які вони містять) походять від libc. Докладніше про GCC FIXINCLUDES та виправлені файли заголовків .
(Річ у виправленні включає те, що я (Базил) досі не дуже добре розумію.)
Ви можете скомпілювати за допомогою gcc -v -H, щоб краще зрозуміти, які фактично програми запущені (оскільки gcc - це драйвер, який запускає компілятор cc1, ld & collect2, як асемблер тощо). і які заголовки включені, які бібліотеки та файли об’єктів пов’язані (на даний момент) неявно, включаючи стандартну бібліотеку C та crt0). Більше інформації про варіанти GCC .
До речі, ви можете використовувати стандартну бібліотеку C, яка відрізняється від того, що очікується або створена для вашого GCC (наприклад, musl-libc або бібліотека дієт), одночасно обходячи відповідні додаткові аргументи для створення gcc .