Что происходит, когда вы вводите gcc main.c

C — это язык программирования, которому нужен компилятор для преобразования его в исполняемый код, поэтому мы можем запустить программу на нашем компьютере.

Чтобы преобразовать нашу программу на языке C в исполняемый код, нужно выполнить четыре шага:

Создайте исходный файл и запустите программу c:

Чтобы создать исходный файл, мы должны использовать редактор, чтобы написать нашу программу на языке C и сохранить ее с расширением .c. Например:

$ emacs имя файла.c

или $ vi имя_файла.c

Затем мы компилируем программу c с помощью gcc, чтобы преобразовать нашу программу в исполняемый файл. Например:

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

с опцией -o мы можем указать имя выходного файла. (в этом случае мы указываем имя выходного файла с именем имя_файла). Поэтому, когда мы запустим его, мы получим выходной файл с именем filename.

Итак, что произойдет, если мы не используем опцию -o. Например:

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

без использования параметра -o будет автоматически создан выходной файл с именем a.out.

Затем мы можем запустить нашу программу с помощью этой команды:

$./имя файла

(В данном случае имя_файла — это ваш выходной файл. Если выходной файл — a.out, вы вместо этого можно использовать ./a.out)

Шаг 1. Предварительная обработка

Предварительная обработка изменяет программу c в соответствии с директивами, которые начинаются с символа решетки «#», например:

#include ‹stdio.h›

#define FILE_SIZE 10

Это также удалит комментарий из исходного файла. Например

/*это комментарий*/

//Это комментарий

Для получения информации о C-preprocessing

Мы можем использовать приведенную ниже команду для вызова препроцессора gcc с помощью следующей команды:

$gcc -E имя файла.c -o имя файла

-E : Остановить после этапа предварительной обработки; не запускайте компилятор
должным образом. справочная страница

Шаг 2: компиляция

На этом этапе компиляция проверит синтаксические ошибки для нашей программы. Он переведет наш программный код c на язык ассемблера.

Мы можем использовать команду ниже, чтобы получить файл на языке ассемблера с расширением .s, используя следующую команду:

$gcc -S имя файла

-S:Остановить после этапа собственно компиляции; не собираться. справочная страница

(в этом случае нам не нужно использовать параметр -o для выходного файла с расширением .s, поскольку параметр -S уже делает это за нас.)

Файл filename.s может выглядеть следующим образом:

Шаг 3: Соберите

На этом шаге мы конвертируем файл .s с инструкцией по сборке в объектный файл .o (низкоуровневый машинный код), но такие вызовы функций, как printf(), не разрешаются, так как gccне знает о определение функции на этом этапе. Объектный файл .o не может быть просмотрен редактором. Если мы откроем файл .o, он будет выглядеть так:

мы можем использовать эту команду для запуска:

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

-c : скомпилировать или собрать исходные файлы, но не компоновать. справочная страница

Шаг 4. Связывание

На этом этапе он связывает различные объектные файлы для создания исполняемого файла. На этом этапе решены все проблемы с вызовами функций, о которых я упоминал в шаге 3. Линкер знает, где реализованы все функции.