Есть много вещей, которые происходят с вашим исходным кодом, когда вы пытаетесь скомпилировать его с помощью gcc. Я рассмотрю этапы компиляции, которые заставят ваш исходный код превратиться в исполняемый код с использованием gcc.

Что такое гкк?

Коллекция компиляторов GNU (GCC) — это система компиляции, используемая для преобразования исходного кода (кода, написанного вами, программистом) в исполняемый код для вас с помощью команды gcc. При ссылке на название GCC (коллекция компиляторов GNU) вы используете заглавные буквы, а при ссылке на команду, которую вы используете в терминале, вы используете строчные буквы gcc. Эта система может распознавать несколько языков кода и соответствующим образом корректироваться. Вначале он работал только с языком C, но теперь он расширен до C++, Objective-C, Objective-C++, Fortran, Java, Ada, Go и даже больше. Это бесплатное программное обеспечение, которое сыграло роль в поощрении роста других свободных программ.

После выполнения команды gcc ваш код пройдет четыре этапа. Эти шаги по порядку: препроцессор, компилятор, ассемблер и компоновщик.

Препроцессор

Раздел «Препроцессор» процесса компиляции берет первоначальный исходный код (ваш код) и начинает с удаления всех комментариев и включения файлов заголовков (например, #input <stdio.h>).

Сначала создадим файл исходного кода с именем source_code.c.:

#include <stdio.h>

/**
 * main - Entry point
 *
 * Return: Always 0 (Success)
 */
int main(void)
{
    printf("Hello World\n");
    return (0);
}

Теперь запустите команду:

$ gcc -E source_code.c -o test_file

Это остановит процесс компиляции и запишет результаты шага предварительной обработки в файл test_file. Чтобы просмотреть файл, просто запустите cat test_file. Если вы не остановите процесс компиляции, он перейдет к следующему шагу, который называется компилятором.

Компилятор

Этот раздел компилятора процесса компиляции берет недавно отредактированный код (без комментариев и включенных файлов заголовков) и переводит этот код в новый тип кода, называемый ассемблерным кодом. Чтобы взглянуть на этот новый файл, выполните команду:

$ gcc -S source_code.c -o test_file

Просто снова cat файл, и вы увидите, что код сильно изменился. После того, как компилятор выполнил свою работу, код теперь передается ассемблеру.

Ассемблер

Этот код теперь используется ассемблером для создания объектного кода, то есть кода, содержащего только 0 и 1, и передает его компоновщику. Также на этом этапе можно остановить процессы и посмотреть новый файл, выполнив команду:

$ gcc -c source_code.c -o test_file

Посмотреть файл cat test_file еще раз. Как только этот новый файл создан, он передается компоновщику.

Линкер

Компоновщик берет системные библиотеки и объединяет их с объектным кодом для создания исполняемого кода. Как только вы достигнете исполняемого кода, вы можете запустить его как исполняемый файл. Итак, чтобы пройти процесс, не останавливая его в определенные моменты, вы должны запустить команду:

$ gcc source_code.c -o test_file

Теперь у вас есть исполняемый код внутри файла test_file. Чтобы запустить этот файл, просто введите:

$ ./test_file
Hello World

И вы можете видеть, что наш код теперь запускается и печатает сообщение «Hello World». Вот как исходный код проходит процесс компиляции, чтобы стать исполняемым кодом.