2012-02-10 10 views
5

Tengo un archivo de origen que preprocesamos utilizando las opciones -E y -P (utilizando GCC 4.1.2 para una plataforma integrada basada en vxWorks). Todas las otras opciones son las mismas que cuando compilo el archivo. Estas opciones son:Compilación de cambios de archivos preprocesados ​​anteriores, salida

-Wall 
-march=pentium 
-nostdinc 
-O0 
-fno-builtin 
-fno-defer-pop 
-g 
-c 
-o 

, así como todas las rutas de acceso incluidas. Ahora cuando compilo este archivo preprocesado, el archivo objeto resultante es mucho más pequeño (alrededor del 30%) que cuando compilo el original directamente. Y cuando luego enlace el programa, el enlazador se queja de los símbolos que faltan (todos en código de usuario), lo que de nuevo no ocurre cuando se utiliza el archivo fuente original. ¿Por qué hay una diferencia? ¿Hay alguna manera de hacer funcionar esto?

Respuesta

1

¿Estás seguro de que no te falta ningún -D define desde tu línea de comandos? Su resultado sería consistente con partes que no se compilan debido a condicionales.

Otra posibilidad (ya que no nombra el compilador específicamente) es que está utilizando un gcc -E genérico en lugar del compilador cruzado específico del arco para su entorno vxWorks. El cross-gcc predefinirá algunas variables que necesitará para gcc -E.

+0

Estoy modificando la regla que crea el archivo objeto simplemente agregando el indicador ''E'- y' -P', sin eliminar nada, así que estoy bastante seguro de que estoy usando el compilador correcto y tengo todo el define. –

1

Al compilar la salida preprocesada, intente pasar la opción -fpreprocessed para indicarle a GCC que no vuelva a preprocesar.

La única diferencia que puedo pensar es en macros que resultan en expandir a un identificador que es un nombre de macro que ya se ha expandido: el preprocesador detiene la expansión en ese punto, pero si ejecutó el preprocesador nuevamente, el identificador sería expandido de nuevo. Hubiera esperado que cualquier instancia de esto causara probablemente un error de compilación, pero ¿quién sabe?

Cuestiones relacionadas