Что происходит, когда вы печатаете
gcc main.c
в командную строку и нажмите Enter?
Давайте разберемся!
Во-первых, какую команду и файл мы используем/работаем? Это говорит оболочке запустить команду «gcc» для файла «main.c».
Расширение «.c» в этом файле позволяет нам (и операционной системе) знать, что данные в файле находятся на языке программирования C.
Команда «gcc» — это компилятор Linux для проектов GNU на языках C и C++. Это означает, что команду «gcc» можно использовать для файлов с расширением «.c».
Фантастика, «gcc» скомпилирует «main.c»! Но ждать. Что такое компилятор??
Компилятор
Компилятор преобразует исходный код, написанный на языке программирования (например, C), в другой язык программирования, который может использовать операционная система (обычно двоичный).
Как компилятор делает всю эту работу? Взяв исходный файл и пропустив его через несколько процессов: предварительную обработку, компиляцию, сборку и компоновку.
Препроцессор
Препроцессор берет данные из вашего файла, также известного как исходный код, и редактирует их, включая код заголовка в самом файле и заменяя любые макросы соответствующими значениями макросов.
Допустим, в нашем файле main.c есть следующие данные:
#include <stdio.h> int main(void) { printf("Hello\n"); return (0); }
Если мы пропустим этот исходный код через препроцессор, препроцессор преобразует его в следующие данные и отправит компилятору:
(Обратите внимание, это только первые 10 строк данных для примера.)
Компилятор
Компилятор берет данные из препроцессора и преобразует их в ассемблерный код.
Ассемблерный код — это язык программирования низкого уровня, в котором структуры и команды соответствуют машинному языку, но вместо чисел используются имена. (Это облегчает программистам работу и понимание.)
Если мы продолжим цепочку компиляции и отправим наши данные предварительной обработки через компилятор, мы получим от компилятора следующее:
(Примечание: для примера показаны только первые 10 строк.)
Собрать
Как только компилятор создает ассемблерный код, ассемблерная часть процесса берет ассемблерный код и преобразует его в объектный код.
Объектный код — это в основном данные на компьютерном языке, таком как двоичный код.
После сборки наши данные main.c будут выглядеть так:
Линкер
Как только компоновщику предоставлен объектный код, он берет эти данные и связывает их с соответствующими библиотеками для создания и выполнения программы. Если для исполняемого файла не указано конкретное имя файла, имя файла по умолчанию — «a.out».
Чего мы ожидаем?
Изучив всю эту информацию, если мы запустим «gcc main.c», мы должны ожидать создания нового исполняемого файла с именем «a.out» в нашем текущем каталоге.
Посмотрим!
- Запустите «gcc main.c» в нашем текущем каталоге:
2. Используйте команду «ls -l», чтобы проверить, был ли создан и исполняемый файл «a.out»:
Как мы видим, файл «a.out» существует, и его разрешения «-rwxrwxr-x», показывающие, что файл является исполняемым для владельца файла, группы файла и всех других пользователей.
Есть много разных опций для команды gcc; мы рассмотрели только самую простую форму этой команды. Смело смотрите другие варианты здесь и думайте, как и зачем вы будете использовать их в своей системе.
До следующего раза, расшифруйте прочь!