Слайд 2
Исходный C++ файл — это всего лишь текст, и его невозможно запустить как программу или использовать как библиотеку. Поэтому каждый исходный файл (то что печатает программист) требуется скомпилировать в исполняемый файл (то, с чем может работать компьютер), динамическую или статическую библиотеки. Исходный код Исправленный код Ассемблерный код Набор объектных файлов Процессинг Ассемблирование Компиляция Компоновка Исполняемый файл 1 2 4 5 3 Загрузка Программа запущена 6
Слайд 3
1) Процессинг (выполняется препроцессором/ макропроцессором) - преобразовывает вашу программу для дальнейшего компилирования. На данной стадии происходит работа с препроцессорными директивами. Например, вместо хэдеров ( #include ) добавляются листы кода, из указанных файлов библиотек. Убираются комментарии. Макросы # define, которые, по сути, являются автозаменой - заменяются во всех участках кода их реальными значениями, выбирает нужные куски кода в соответствии с условиями # if, # ifdef и # ifndef.
Слайд 4
Ассемблерный код — это код на языке низкого уровня (понятный и человеку и компьютеру). Ассемблер, хоть и является одним из сложнейших языков программирования – является самым быстродейственным, так как пишется уже на языке, понятном для машины. 2. Этап Ассемблирование – ассемблирование – это перевод кода с любого языка программирования в ассемблерный код. Эта процедура не является обязательным процессом обработки файлов на языке C++ (поэтому с++ и работает быстрее).
Слайд 5
3. Компилирование — процесс превращения текстов на языке Ассемблера в объектные файлы. Это файлы состоящие из кодов целевого процессора (процессора компьютера), но в которых еще не проставлены адреса объектов, находящихся в других объектных файлах или библиотеках. Проще говоря, после компилирования мы имеем много листов бинарного кода (нули и единицы), но пока не знаем куда их подставить, и в каком порядке, чтобы всё заработало.
Слайд 6
Объектный файл — это созданный компилятором промежуточный файл, хранящий часть машинного кода. Одна программа разделяется на несколько таких частей – объектных файлов. Далее возможно сохранение данного объектного кода в статические библиотеки для того, чтобы не компилировать данный код снова.
Слайд 7
4) Компоновка или по-другому Линковка Компоновщик (линкер) связывает все объектные файлы и статические библиотеки в единый исполняемый файл, который мы и сможем запустить в дальнейшем (.exe -файл). Связка происходит при помощи таблиц символов, которую компоновщик создаёт.
Слайд 8
Таблица символов — по сути, это большой массив, огромная камера хранения, создаваемая компилятором и хранящаяся в самих объектных файлах (которые были созданы на предыдущем этапе). Таблица символов содержит имена переменных, функций, классов, объектов, короче всего, что было создано в программе. И каждому идентификатору (символу) соотносится его тип, область видимости. Также таблица символов хранит адреса ссылок на данные и процедуры в других объектных файлах. То есть, с помощью этой таблицы объектные файлы, могут обмениваться данными между собой. Именно с помощью таблицы Линкер сможет объединить все объектные файлы в один исполняемый.
Последний слайд презентации: Процесс компиляции программ
5) Загрузка Последний этап, который предстоит пройти нашей программе — вызвать загрузчик для загрузки нашей программы в память. Дело в том, что код на компьютере выполняется постоянно, выполняются фоновые программы, в том числе – код операционной системы ( windows ). И чтобы добавить новую программу в этот бесконечный поток кода – нужно определить в какое место системы её можно встроить, чтобы потом безопасно удалить, не повредив ход работы всех остальных программ. На данной стадии также возможна подгрузка динамических библиотек.