Прежде всего, что такое «gcc»?

Коллекция компиляторов GNU (GCC) — это система компиляторов, созданная Проектом GNU, поддерживающая различные языки программирования. GCC является ключевым компонентом инструментальной цепочки GNU и стандартным компилятором для большинства проектов, связанных с GNU и Linux, наиболее заметным из которых является ядро Linux. Фонд свободного программного обеспечения (FSF) распространяет GCC под Стандартной общественной лицензией GNU (GNU GPL). GCC сыграл важную роль в развитии свободного программного обеспечения как инструмента и как примера.

Что такое main.c?

Это файл, который будет скомпилирован.

Итак… Как это работает?

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

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

Удалите комментарии и включите файлы заголовков в исходный код, замените имя макроса кодом.

Если вы просто хотите использовать gcc до этого типа части:

gcc -E main.c -o предварительно

Где:

-EОстановить после этапа предварительной обработки; не запускайте собственно компилятор. Вывод представляет собой предварительно обработанный исходный код, который отправляется на стандартный вывод.

-o pre Поместить вывод в префайл. Это применимо независимо от того, какой тип вывода создается, будь то исполняемый файл, объектный файл, файл на ассемблере или предварительно обработанный код C.

Компилятор

Сгенерировать ассемблерный код.

Если вы просто хотите использовать gcc до этого типа части:

gcc -c main.c

Где:

-cСкомпилировать или собрать исходные файлы, но не связывать их. Стадия связывания просто не выполняется. Конечным результатом является объектный файл для каждого исходного файла.

По умолчанию имя объектного файла для исходного файла создается путем замены суффиксов .c, .i, .s, и т. д. с .o.

Ассемблер

Преобразование ассемблерного кода в объектный код (например: 101010011).

Если вы просто хотите использовать gcc до этого типа части:

gcc -S main.c

Где:

-SОстановить после этапа собственно компиляции; не собираться. Выходные данные представлены в виде файла кода на ассемблере для каждого указанного входного файла без ассемблера.

По умолчанию имя исходного файла на ассемблере создается путем замены суффикса .c, .i и т. д. на .s.

Линкер

Буквально связать обейт-код с библиотеками для завершения исполняемого файла.

Если вы наберете: gcc main.c

Он выполнит все предыдущие шаги. , -o не указан, поэтому по умолчанию исполняемый файл помещается в a.out.

Библиография