Предыдущие знания, в качестве совета рекомендую ознакомиться с информацией о c (язык программирования), компилятор, GCC (GNU Compiler Collection), Текстовые редакторы Linux. (vi, vim, emacs, atom и т. д.)», оболочка Linux, Bash, ассемблер.

Давайте напишем нашу первую программу на C, для этого воспользуемся текстовым редактором Linux (vi, emacs, atom и т. д.), напишем следующий код и сохраним его как hello.c:

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

Чтобы начать процесс компиляции в Linux, мы можем использовать компилятор GCC, который в основном берет код C и преобразует его в машинный язык— двоичный код (0100101…) —, GCC компилирует программу в четыре этапа (предварительная обработка, компиляция, сборка, компоновка), чтобы получить исполняемый файл.

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

Это первый этап для файла исходного кода C, здесь файл обрабатывается препроцессором, который удаляет все комментарии из нашего файла hello.c, включает код из header(например, Функции стандартной библиотеки Cкакstdio.h) и исходный файл, а также заменяет макросы (если таковые имеются). используемые в программе) с кодом. Если вы просто хотите выполнить этап предварительной обработки, используйте команду gcc -E hola.c в том же каталоге, где находится файл hola.c.

Компилятор

Компилятор компилирует предварительно обработанный исходный код в ассемблерный код для конкретного процессора, выходной файл представляет собой ассемблерный код, который может работать на разных компьютерах с разной архитектурой, например. Синтаксис Intelзависит от параметров, указанных для GCC.

Используя -S (верхний регистр), gcc преобразует предварительно обработанный исходный код C в язык ассемблера и создает файл с именем hola.s. содержащий сгенерированные инструкции по сборке для файла hola.c.

Ассемблер

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

Это говорит компилятору запустить препроцессор для файла hello.c, а затем скомпилировать его в файл объектного кода «hello.o». Параметр «-c» означает компилировать файл исходного кода в объектный файл, но не вызывать компоновщик. Содержимое этого файла находится в двоичном формате.

Линкер

Наконец, компоновщик связывает код объекта с кодом библиотеки для создания исполняемого файла. Как и препроцессор, компоновщик представляет собой отдельную программу с именем ld. Как и препроцессор, компоновщик вызывается автоматически при использовании компилятора gcc. Обычный способ использования компоновщика следующий:

В этой строке инструкция указывает компилятору gcc связать вместе три объектных файла (hello1.o, hello2.o и hello3.o) в двоичный исполняемый файл hello . Теперь у вас есть файл с именем hello, который вы можете запустить.