para ejecutar con compiler compilar comandos gcc c99 c89 freestanding

ejecutar - gcc compiler linux



Compilar para un entorno independiente con GCC (2)

Se supone que es posible construir el código en el que estoy trabajando, tanto para entornos alojados como independientes, proporcionando implementaciones privadas para algunas funciones stdlib para este último caso.

¿Puedo probar esto de manera confiable con solo GCC en una estación de trabajo / servidor de compilación normal?

  • La opción "no declarada" parecía prometedora, pero parece que "solo" deshabilita las incorporaciones y establece correctamente la macro STDC_HOSTED, todavía proporciona todos los encabezados del sistema.

  • La opción "-nostdinc" es demasiado restrictiva; Todavía quiero usar los encabezados necesarios para una implementación independiente (en particular, stddef.hy limits.h).

¿Que me estoy perdiendo aqui?

Ah, y estoy usando GCC 4.4.3 por el momento, actualizará a 4.5.0 "pronto".


Bueno, dado que aún no se da ninguna respuesta, podría describir cómo hice esto. Es bastante simple, aunque dependiendo del sistema de destino puede ser tedioso.

El uso de "-nostdinc" significa que el sistema estándar incluye rutas salteadas; otras rutas de inclusión dadas con "-I" por supuesto todavía se buscarán encabezados.

Por lo tanto, para el objetivo de construcción independiente, creo una carpeta ''include-independiente-c89'' y enlace los encabezados del sistema correspondientes - float.h , iso646.h , limits.h , stdarg.h y stddef.h - allí. Se pueden incluir otros encabezados en estos, dependiendo de su plataforma, por lo que es posible que tenga que investigar y establecer más enlaces (de ahí la tediosidad si necesita hacer esto para varias plataformas de destino).

El directorio C89 se puede usar como base para ''incluir-independiente-c99'', los encabezados adicionales para vincular son stdbool.h y stdint.h

La línea de comando a usar es entonces

gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89

o

gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99