c gcc compiler-errors size-t linaro

El compilador linaro de GCC arroja el error "nombre de tipo desconocido size_t"



compiler-errors size-t (3)

Para lo que vale, tuve este mismo problema con un proyecto de QT, donde estaba usando un compilador Linaro para (tanto en Windows x86 como en Linux x86) para ARM Linux. Al usar exactamente el mismo código y archivo .pro, no tuve problemas para compilar en Windows, pero tuve una gran cantidad de errores en la caja de Linux, comenzando con el unknown type name ''size_t'' en libio.h que se remonta a un #include <stdio.h> . Busqué en stdio.h (en sysroot para el hardware de destino, no en la máquina host), y algunas líneas hacia abajo estaban #include <stddef.h> (mucho antes de #include <libio.h> ), así que stddef.h definitivamente fue incluido. Sin embargo, tras una inspección adicional, stddef.h estaba completamente vacío con un tamaño de archivo de 1 byte. Esto fue cierto para stddef.h en mi sysroot y en mi máquina host. No tengo idea de por qué estos archivos estaban vacíos.

De todos modos, resulta que tuve un INCLUDEPATH += /usr/include/linux extraño en mi archivo .pro. En mi máquina de compilación de Linux, esto agregó -I/usr/include/linux al Makefile generado por qmake. En mi máquina de compilación de Windows, esto agregó -isystem /usr/include/linux al Makefile generado por qmake. Una vez que comenté esto, estas líneas se eliminaron de Makefiles y se construyeron en ambas máquinas de compilación. -isystem /usr/include/linux aparentemente nunca causó ningún problema en la máquina de compilación de Windows, por lo que no hubo ningún problema en la eliminación de INCLUDEPATH += /usr/include/linux .

Realmente no sé por qué esto solucionó mi problema, pero sospecho que hubo algún tipo de conflicto entre los archivos de encabezado. Tal vez fue mezclar archivos de encabezado de host con archivos de encabezado sysroot, o crear una dependencia circular de alguna manera. La documentación de GCC dice que cualquier cosa incluida con la opción -I tendrá prioridad sobre un archivo de encabezado del sistema. Mi mejor consejo para este problema es analizar detenidamente qué archivos de encabezado se incluyen y de dónde provienen.

Estoy usando el compilador GCC Linaro para compilar mi código. Es el error de lanzar el unknown type name size_t de libio.h . Está incluido desde stdio.h . En mi código solo estoy incluyendo stdio.h .

¿Puede alguien por favor cómo resolver este error.


Según C99, §7.17, size_t no es un tipo incorporado pero está definido en <stddef.h> .

Incluir el <stddef.h> debería solucionar su problema.


Tanto stdio.h como stdlib.h incluyen el tipo de datos size_t . Incluyen este tipo de datos porque las funciones declaradas en estos encabezados toman size_t como parámetro o lo devuelven como tipo de retorno. size_t sí es un typedef para un tipo integral sin signo y también es devuelto por el operador sizeof .

Y como el operador sizeof está integrado en el propio lenguaje de programación C, no incluido a través de alguna biblioteca, ¿cómo puede size_t ser un nombre de tipo desconocido?