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