Есть много вещей, которые происходят с вашим исходным кодом, когда вы пытаетесь скомпилировать его с помощью 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». Вот как исходный код проходит процесс компиляции, чтобы стать исполняемым кодом.