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