На изображении выше мы видим базовый процесс компиляции программы на языке программирования C. На этой диаграмме показаны шаги, которые программа выполняет для компиляции программы, но что такое «gcc»? давайте посмотрим кое-что об этом.

Коллекция компиляторов GNU — это набор компиляторов, созданных в рамках проекта GNU. GCC является свободным программным обеспечением и распространяется Free Software Foundation (FSF) под общедоступной лицензией GPL; GCC является частью проекта GNU и направлен на улучшение компилятора, используемого во всех системах GNU, включая вариант GNU/Linux. При разработке GCC используется открытая среда разработки и поддерживается множество платформ, чтобы поощрять использование компилятора-оптимизатора глобального класса. gcc выполняет свою работу в четыре этапа:

1. Препроцессор принимает исходный код в качестве входных данных и отвечает за:

- Удалить комментарии.

- Интерпретировать и обрабатывать директивы предварительной обработки, которым всегда предшествует символ #.

Двумя наиболее часто используемыми директивами в C являются #include и #define:

#include: заменить строку содержимым указанного файла.

Например,

#include ‹stdio.h›

включает файл stdio.h, который содержит объявления типов и функции ввода/вывода стандартной библиотеки C. Включение подразумевает, что все содержимое подключаемого файла заменяет строку #include.

#define: определяет символическую константу (идентификатор).

2- Компилятор анализирует синтаксис и семантику предварительно обработанного исходного кода и транслирует его, создавая файл, содержащий объектный код. Расширение этих файлов по умолчанию — .o.

3- Ассемблер берет предыдущий код и преобразует его в машинный код (двоичный).

4- Компоновщик разрешает ссылки на внешние объекты, находящиеся в исходном файле. Эти ссылки представляют собой объекты, находящиеся в других скомпилированных модулях либо в виде объектных файлов, либо включенные в библиотеку.

Программа компоновки, предоставляемая GNU, называется ld. Однако обычно эту программу не вызывают явно, но она также удобно вызывается компилятором gcc: когда gcc вызывается и один из пользователей является объектом модуля библиотечного файла, последним шагом, который выполняет gcc, является вызов линкер ld. Таким образом, мы видим, что gcc — это больше, чем компилятор (формально) и что при вызове gcc исходный код предварительно обрабатывается, компилируется, собирается и даже компонуется.

Все эти предыдущие шаги, создание исполняемого файла.