crt0.o и crt1.o - Какая разница?
Недавно я пытался отладить некоторые работы низкого уровня, и я не мог найти crt0.S
для компилятора ( AVR-GCC), но я нашел crt1.S
(и то же самое с соответствующим .o
файлы).
В чем разница между этими двумя файлами? Является crt1
что-то совершенно другое или что? Похоже, что они оба имеют отношение к "начальной загрузке" (настройка stack frame
и такое) а почему различие?
1 ответ
Решение
Оба crt0/crt1 делают одно и то же, в основном делают то, что нужно, перед вызовом main() (например, инициализация стека, установка irqs и т. Д.). Вы должны связаться с одним или другим, но не с обоими. На самом деле это не библиотеки, а встроенный ассемблерный код.
Насколько я понимаю, ЭЛТ поставляется в двух "вкусах"
- crt1 используется в системах, которые поддерживают конструкторы и деструкторы (функции, вызываемые до и после main и exit). В этом случае main обрабатывается как обычный вызов функции.
- crt0 используется в системах, которые не поддерживают конструкторы / деструкторы.