Подтвердить что ты не робот

Компиляция для автономной среды с GCC

Предполагается, что код, который я работаю, можно построить как для размещенных, так и для автономных сред, предоставляя частные реализации для некоторых функций stdlib для последнего случая.

Могу ли я надежно проверить это с помощью GCC на обычном сервере рабочей станции/сборки?

  • Параметр "-ffreestanding" выглядел многообещающим, но кажется, что он "только" отключает встроенные модули и правильно устанавливает макрос STDC_HOSTED, он все еще предоставляет все системные заголовки.

  • Опция "-nostdinc" слишком ограничительна; Я все еще хочу использовать заголовки, необходимые для самостоятельной реализации (в частности, stddef.h и limits.h).

Что мне здесь не хватает?

О, и я использую GCC 4.4.3 на данный момент, обновится до 4.5.0 "скоро".

4b9b3361

Ответ 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