Как скомпилировать для автономной среды с GCC? - PullRequest
20 голосов
/ 21 апреля 2010

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

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

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

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

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

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

Ответы [ 2 ]

19 голосов
/ 23 апреля 2010

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

Использование «-nostdinc» означает, что пути к стандартной системе включают пути, которые будут пропущены; другие пути включения, указанные с "-I", конечно же, будут все еще искать заголовки.

Итак, для цели автономной сборки я создаю папку include-freestanding-c89 и связываю соответствующие системные заголовки - float.h , iso646.h , limit.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
2 голосов
/ 17 декабря 2014

Этот Xen Makefile использует gcc -print-search-dirs, чтобы получить каталог с stddef.h и подобным, добавляет его с -isystem, затем использует -nostdinc для построения:

https://github.com/mirage/xen/blob/2676bc915157ab474ee478d929b0928cf696b385/stubdom/Makefile#L35

...