Зачем нужен объектный файл для генерации исполняемого файла?

Когда мы компилируем код, генерируется объектный файл. Из этого объектного файла в процессе компоновки создается исполняемый файл.

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

1 ответ

Решение

Объектные файлы - это то, что компоновщик использует для создания полных исполняемых файлов (или библиотек).

Обычно ваш компилятор может выводить исполняемый файл "напрямую", синтаксис будет зависеть от компилятора. Например с GCC:

gcc foo.c bar.c ...

создаст исполняемый файл, и промежуточный объектный файл не останется (но он, вероятно, будет сгенерирован и впоследствии удален).

Объектные файлы используются для создания инкрементной сборки. Вы компилируете каждый исходный файл (или группу исходных файлов) в объектные файлы, а затем связываете их все вместе в исполняемый файл. Это позволяет вам перекомпилировать только исходные файлы, которые были изменены с момента последней сборки, что потенциально экономит много времени.
Или вы можете использовать одни и те же объектные файлы для связывания разных исполняемых файлов (например, повторно использовать части вашей сборки для генерации как исполняемого файла, так и совместно используемой библиотеки), опять же экономя время и ресурсы по сравнению с компиляцией каждый раз.

Объектные файлы не "нужны" с теоретической точки зрения. Они просто очень практичны (и на самом деле необходимы технически с некоторыми (большинством?) Инструментальными цепочками, потому что ассемблер знает, как производить, а компоновщик знает, как создавать ссылки).

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