Ответ вслух Junior Сборка и линковка спрашивают часто обновлено

От исходника до исполняемого файла

Вопрос

Расскажите, что происходит, когда вы собираете C++-программу из нескольких файлов: от .cpp до исполняемого файла.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сборка идёт в несколько этапов. Препроцессор берёт каждый .cpp, вставляет текст всех включённых заголовков, раскрывает макросы и вырезает неактивные ветки if: получается единица трансляции.

Что должно прозвучать в ответе

  • Препроцессор: include, макросы, условная компиляция, единица трансляции

  • Компиляция каждой единицы отдельно в объектный файл

  • В объектном файле определённые символы и неразрешённые ссылки

  • Линковка: разрешение символов, статические библиотеки, релокации

  • Динамические библиотеки разрешаются загрузчиком при запуске

  • Типичные ошибки этапов: компиляции против линковки

Что могут спросить следом

  • Почему шаблоны обычно определяют в заголовках?
  • Как ускорить сборку большого проекта?

Разбор

Сборка идёт в несколько этапов. Препроцессор берёт каждый .cpp, вставляет текст всех включённых заголовков, раскрывает макросы и вырезает неактивные ветки #if: получается единица трансляции. Компилятор переводит её в машинный код и пишет объектный файл: там код, данные, таблица символов, которые этот файл определяет, и список ссылок на символы, которые он только использует. Каждый .cpp компилируется независимо, поэтому компилятору достаточно объявлений. Затем линковщик собирает объектные файлы и библиотеки, сопоставляет каждую ссылку с единственным определением, раскладывает секции и проставляет адреса. Ошибки «undefined reference» и «multiple definition» возникают именно здесь. Если используются динамические библиотеки, часть символов разрешает загрузчик при запуске программы. Понимание этапов помогает быстро чинить ошибки: синтаксис и типы ловит компилятор, а отсутствующие и лишние определения линковщик.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.