Модуль перевода vs Модуль компиляции vs объектный файл vs исполняемый файл vs.... в C++

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

Мне известно, что эти файлы создаются во время компиляции и связывания программ на C++. Может ли кто-нибудь перечислить все файлы, которые будут сгенерированы во время этих процессов, и указать различия между ними?

1 ответ

Решение

Единица перевода - это то же самое, что и единица компиляции (поэтому ваш источник и все файлы заголовков, которые он включает)

Объектный файл в типичных случаях является результатом компиляции модуля компиляции.

Исполняемый файл - это результат связывания объектных файлов проекта с функцией библиотеки времени выполнения.

То, какие именно файлы генерируются во время компиляции, зависит от компилятора, но большинство современных компиляторов просто читают исходный файл и заголовки, а затем создают объектный файл, который передается компоновщику напрямую, если у вас есть только один исходный файл. Это создает исполняемый файл.

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

Обратите внимание, что это просто практика, в стандартах C или C++ нет ничего о исполняемых файлах или объектных файлах. Это зависит от реализации компилятора, чтобы решать эти вопросы так, как им нравится.

Другие вопросы по тегам