Оба crt0 / crt1 делают одно и то же, в основном делают то, что нужно, перед вызовом main () (например, инициализация стека, установка irq и т. Д.) Вы должны связать с одним или другим, но не обоими. На самом деле это не библиотеки, а встроенный ассемблерный код.
Насколько я понимаю, ЭЛТ выпускается в двух "вкусах"
- crt1 используется в системах, которые поддерживают конструкторы и деструкторы (функции, вызываемые до и после main и exit). В этом случае main обрабатывается как обычный вызов функции.
- crt0 используется в системах, которые не поддерживают конструкторы / деструкторы.