Что делает файл объектного кода ctr1.o в компиляторе gcc? - PullRequest
3 голосов
/ 20 мая 2009

Что делает файл obj ctr1.o в компиляторе gcc? Почему компоновщик связывает этот файл obj всякий раз, когда генерируется исполняемый файл?

Ответы [ 3 ]

6 голосов
/ 20 мая 2009

Я думаю, что он содержит очень простые вещи (crt обозначает время выполнения C), такие как установка argv и argc для вашей основной функции и т. Д. Вот ссылка с некоторым объяснением

Если вы не хотите этого, потому что вы пишете крошечный загрузчик, например, без какой-либо части libc, вы можете использовать опции --no-stdlib, чтобы связать вашу программу. Если вы пойдете по этому пути, вам также потребуется написать собственный скрипт компоновщика.

1 голос
/ 20 мая 2009

Я не уверен, что понимаю ваш вопрос, но, думаю, вы ссылаетесь на 'crt1.o' в пакете GCC.

crt является одним из базовых пакетов libc, который предоставляет базовые функциональные возможности для доступа к компьютеру. IIRC содержит такие методы, как «printf» и т. Д.

Именно поэтому он часто даже включается в самые основные приложения на Си.

1 голос
/ 20 мая 2009

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

Поскольку каждый исходный файл (.c или .cpp) компилируется в отдельный объектный файл, который затем считывается компоновщиком, изменения в одном файле C означают только то, что можно перекомпилировать, генерируя новый объектный файл, который затем связывается с существующими объектными файлами в новый исполняемый файл. Это ускоряет разработку.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...