summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20210519112044-компилируемые_языки_программирования.org
blob: e7d77d9f38233f84f5742a36d76c522737fd183c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
:PROPERTIES:
:ID:       5346da1a-6f67-4919-ac90-fd1a0b4c68f3
:END:
#+title: Компилируемые языки программирования
* Компилируемые языки программирования
[[https://youtube.com/watch?v=sIlPn7JD1Ug][GNU Toolchain]]
[[https://youtube.com/watch?v=OnEF1MexJlI][GCC and Makefiles]]

Этапы компиляции [[id:40c44577-6cd7-4eac-aac7-288a0537b7e9][языка Си]]:
1. Препроцессор
   - Макросы в компайл тайме
   - Расширение .i
   - gcc -E
2. Компиляция
   - Переводит язык Си в язык Ассемблера
   - Расширение .s
   - gcc -S
3. Сборка (Assembly)
   - Переводит язык Ассемблера в нечитаемый для человека байткод
   - Называются объектными файлами
   - В них существуют "дырки" (holes).

     Скажем при вызове printf скомпилированный объектный файл ещё не будет
     знать откуда printf брать.
   - Расширение .0
   - gcc -c 
4. Линковка
   - Соединяет объектные .o файлы воедино
   - Заполняя в них "дырки" (holes)
   - Выдаёт на выходе исполняемый бинарный файл
   - gcc (без флагов)

Ресурсы:
- [[https://godbolt.org][Godbolt]] :: сайт с выводом компиляторов C в ассемблер