GCC означает коллекцию компиляторов GNU, которая объединяет несколько компиляторов и позволяет компилировать C, C++, Objective-C, Fortran, Java, Ada и другие языки.

Сам компилятор состоит из трех разных частей, с которыми мы будем взаимодействовать из командной строки. Это ассемблер, компилятор, компоновщик, интерпретатор и загрузчик.

Чтобы начать взаимодействовать с этими частями из оболочки, важно иметь базовую программу на C. Я создал файл с именем basiccommand.c, который выглядит так с помощью emacs;

Который просто напечатает «Hello, Medium tutorials!». Возвращаясь к Шеллу,

Мы видим, что basiccomand.c существует в виде файла C, он написан на языке C.

Теперь, если мы применим базовую команду «gcc», мы увидим, что исполняемый файл создан.

a.out — это исполняемый файл, который у нас есть сейчас. Если мы хотим получить конкретику, мы можем запустить каждую часть команды gcc, чтобы увидеть, что происходит, как это происходит.

Первым шагом в команде gcc является препроцессор. Это include‹stdio.h›, который указывает на стандартную библиотеку команд, которые нужно внедрять везде, где вы размещаете этот код. Препроцессор помещает этот код в код C.

Хотите знать, как это выглядит?

Первая команда только для препроцессора — cpp и имеет тип файла «i». Если вы хотите сохранить изолированные результаты вашего препроцессора под настраиваемым именем, вам понадобится ›, который говорит: «Поместите полученные файлы в файл с таким именем и таким типом».

Теперь вы можете emacs войти в ваш файл препроцессора и посмотреть, что там. Это будет выглядеть примерно так;

Затем, после того как команды стандартной библиотеки интерпретированы, компилятор теперь берет все, что делает препроцессор, и делает это исполняемым.

Мы можем увидеть, как это выглядит, используя специальную команду компилятора «cc» и ее тип файла .s.

Это создаст файл .s нашего исходного файла C, состоящий из исполняемого кода, если мы запустим команду cc через файл .i, созданный на последнем шаге.

Как только это будет сделано, мы можем запустить его через все части компилятора.

Вставьте код компилятора «.s» в код ассемблера с помощью команды aa и типа файла «.o».

Что такое ассемблер? Он берет шаблоны компьютера и преобразует их в биты. Биты — это то, что компьютер может легко понять, и именно в этот момент команда была преобразована в низкоуровневую.

Наконец, запустите файл «.o» через ваш компоновщик, используя команду ld, и он будет напечатан так, как изначально было задано файлом C. Компоновщик берет все эти файлы и помещает их все в один исполняемый файл.

Теперь, когда мы понимаем составные части компилятора, я надеюсь, что вас меньше пугает концепция и шаги, которые она выполняет.