Как скомпилировать для среды отдельных программ с GCC?

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

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

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

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

Что я пропускаю здесь?

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

20
задан Ciro Santilli 新疆改造中心法轮功六四事件 21 June 2018 в 06:45
поделиться

1 ответ

Ну, поскольку ответа еще нет, я мог бы также описать, как я добился этой работы. Это довольно просто, хотя в зависимости от целевой системы это может быть утомительно.

Использование "-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
20
ответ дан 30 November 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: