Основной компилятор Linux может показаться пугающим для новичков, которые хотят изучать и создавать простые приложения. Давайте найдем, что он делает!

Что такое GCC?

GCC — это набор инструментов с открытым исходным кодом, созданный проектом GNU, и стандартный компилятор для Unix-подобных систем. Он включает в себя набор очень мощных инструментов, которые позволят вам шаг за шагом настраивать процесс компиляции.

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

Этот этап посвящен подготовке вашего кода перед компиляцией: сначала он удалит все комментарии, затем он унифицирует программный код с заголовками, которые требуются программе (например, заголовки, необходимые для работы с stdio.h). ), а также заменит любые указанные макросы кодом. Давайте посмотрим, как это сделать с помощью параметра -E:

gcc -E имя файла.c -o выходной файл

Теперь наш файл готов продолжить процесс компиляции по мере его удаления. Простой!

Компилятор

Процесс компиляции возьмет этот предварительно обработанный файл и преобразует его (или транслирует) в код на ассемблере. Ассемблерный код — это язык низкого уровня, который напрямую взаимодействует с API операционной системы, компилятор делает этот процесс за нас, поэтому нам не нужно тратить очень много времени на программирование на ассемблере, если нам нужна сложная функциональность. GCC предлагает нам два диалекта ассемблера: att (или AT&T) и Intel (который не поддерживается архитектурой Mac OSX Darwin). Вы можете прочитать больше об att vs intel на этом сайте. Мы можем легко проверить результат этого процесса, используя следующую команду:

gcc -S имя файла.c

Ассемблер

Теперь переходим к стадии ассемблера. После того, как мы перевели код на язык ассемблера более низкого уровня, нам нужно скомпилировать его, чтобы машина могла прочитать его на понятном ей языке: двоичном коде! Для этого мы продвинемся еще на один шаг с помощью команды:

gcc -c имя файла.c

Линкер

Наконец, компоновщик берет объектный код и связывает один или несколько объектных кодов с библиотеками, необходимыми для его запуска, в один исполняемый файл. В соответствии с нашими потребностями мы можем выбирать между динамической или статической компоновкой, например, динамическая компоновка помогает снизить потребление ресурсов и упрощает доставку обновлений или обновлений, с другой стороны, статическая компоновка является предпочтительным выбором для ограниченных сред, таких как этап загрузки или спасите больше» (дополнительная информация о динамической и статической компоновке«). Давайте закончим процесс компиляции, просто введя gcc и имя нашего файла:

имя файла gcc

или в случае, если мы хотим указать имя выходного файла:

gcc имя файла -o исполняемый файл

После того, как он будет готов, мы можем попробовать его и убедиться, что он работает идеально! На этом наше знакомство с основами компилятора gcc заканчивается, но за этими гибко настраиваемыми утилитами компиляции скрывается огромное количество информации. Для получения дополнительной информации посетите страницу проекта GNU GCC.

Эта статья написана для Holberton 0x00. C — Привет, Всемирный проект