у gcc есть всевозможные опции для управления тем, как это работает.Вот несколько важных из них:
-nostdlib
опустить ссылки на стандартные библиотеки и код запуска-nostdinc
чтобы исключить поиск заголовочных файлов в стандартных расположениях.-ffreestanding
для компиляции для автономной среды (например, ядра)
Вам также не нужно использовать gcc для связывания.Вы можете вызвать компоновщик напрямую, снабдить его своей собственной картой компоновщика, объектным кодом запуска и всем остальным, что вам нужно.
Сборка ядра Linux, похоже, по произвольным причинам не используется -ffreestanding
Тем не менее, он управляет этапом связывания и гарантирует, что ядро будет связано без использования какого-либо пользовательского кода.