Ответ 1
Ну, так как ответа еще нет, я мог бы также описать, как я сделал эту работу. Это довольно просто, хотя в зависимости от целевой системы это может быть утомительным.
Использование "-nostdinc" означает, что стандартная система включает пути, которые будут пропускаться; другие include-paths, заданные с "-I", конечно, будут по-прежнему искать заголовки.
Итак, для самостоятельной цели сборки я создаю папку "include-freestanding-c89" и свяжу соответствующие заголовки системы - float.h, iso646.h, limits.h, stdarg.h и stddef.h - там. Другие заголовки могут быть включены в них, в зависимости от вашей платформы, поэтому вам, возможно, придется провести какое-то исследование и установить больше ссылок (отсюда утомительность, если вам нужно сделать это для нескольких целевых платформ).
Затем каталог C89 можно использовать в качестве базы для "include-freestanding-c99", дополнительные заголовки для ссылки - это stdbool.h и stdint.h
В командной строке используется
gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89
или
gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99