Объектные файлы содержат ваш скомпилированный код, но сами по себе не являются исполняемыми. Работа компоновщика состоит в том, чтобы взять все объектные файлы, которые составляют программу, и объединить их в одно целое. Это включает в себя разрешение ссылок между объектными файлами (extern
символы), проверку наличия точки входа main()
(для программ на C) и т. Д.
Поскольку каждый исходный файл (.c или .cpp) компилируется в отдельный объектный файл, который затем считывается компоновщиком, изменения в одном файле C означают только то, что можно перекомпилировать, генерируя новый объектный файл, который затем связывается с существующими объектными файлами в новый исполняемый файл. Это ускоряет разработку.
ОБНОВЛЕНИЕ: Как указано в другом ответе, объектные файлы "crt.o" содержат код C r un t ime, который предполагается понадобиться большинству программ на Си. Вы можете прочитать параметры компоновщика gcc и найти параметр --no-stdlib
, это скажет gcc, что ваша конкретная программа не должна быть связана со стандартными исполняемыми файлами C.