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

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

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

5

Решение

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

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

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

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

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

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

13

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]