Код я продолжаю работать, как предполагается, возможно создать и для размещенных и для сред отдельных программ, обеспечивая частные реализации для некоторых функций stdlib для последнего случая.
Я могу надежно протестировать это только с GCC на нормальном сервере рабочей станции/сборки? Скомпилируйте для среды отдельных программ с GCC
"-ffreestanding" опция выглядела многообещающей, но кажется, что это "только" отключает созданный-ins и устанавливает макрос STDC_HOSTED правильно, это все еще предоставляет все системные заголовки.
Опция "-nostdinc" слишком строга; я все еще хочу использовать заголовки, требуемые для автономной реализации (в особенности stddef.h и limits.h).
Что я пропускаю здесь?
О, и я использую GCC 4.4.3 в настоящий момент, обновит до 4.5.0 "скоро".
Ну, поскольку ответа еще нет, я мог бы также описать, как я добился этой работы. Это довольно просто, хотя в зависимости от целевой системы это может быть утомительно.
Использование "-nostdinc" означает, что стандартные пути включения системы будут пропущены; другие пути включения, указанные с "-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