Подтвердить что ты не робот

Crt0.o и crt1.o - Какая разница?

Недавно я пытался отлаживать работу на низком уровне, и я не мог найти crt0.S для компилятора (avr-gcc), но я нашел crt1.S(и то же самое с соответствующими файлами .o )

В чем разница между этими двумя файлами? Является ли crt1 чем-то совершенно другим или что? Оба они, похоже, имеют отношение к чему-то для начальной загрузки (настройка фрейма стека и т.д.), Но почему это различие?

4b9b3361

Ответ 1

Оба crt0/crt1 делают то же самое, в основном делают то, что необходимо перед вызовом main() (например, инициализация стека, установка irqs и т.д.). Вы должны связываться с тем или иным, но не с обоими. Они не являются действительно библиотеками, а действительно встроенным ассемблерным кодом.

Насколько я понимаю, crt поставляется в двух "ароматах"

  • crt1 используется в системе, которая поддерживает конструкторы и деструкторы (функции, называемые до и после main и exit). В этом случае main рассматривается как обычный вызов функции.
  • crt0 используется для систем, которые не поддерживают конструкторы/деструкторы.