Le compilateur linear de GCC renvoie l'erreur "nom de type inconnu size_t"
Je suis en utilisant GCC Linaro compilateur pour compiler mon code. Son lancement l'erreur unknown type name size_t
de libio.h
. Son inclus à partir de stdio.h
. Dans mon code je suis juste y compris stdio.h
.
Peut-on s'il vous plaît comment résoudre cette erreur.
source d'informationauteur rashok
Vous devez vous connecter pour publier un commentaire.
Comme par C99, §7.17,
size_t
n'est pas un builtin type, mais définis dans<stddef.h>
.Y compris la
<stddef.h>
d'en-tête devrait résoudre votre problème.Pour ce que ça vaut, j'ai eu exactement ce même problème avec un projet QT, où j'ai été en utilisant un Linaro compilateur (à la fois pour Windows x86 et x86 Linux) construire pour Linux ARM. En utilisant exactement le même code et .fichier pro, je n'avais pas de problèmes sur Windows, mais j'ai eu une litanie d'erreurs de construction sous Linux, en commençant par le
unknown type name 'size_t'
danslibio.h
qui remonte à un#include <stdio.h>
. J'ai regardé dans lestdio.h
(dans le sysroot pour le matériel cible, pas sur la machine hôte), et quelques lignes plus bas a été#include <stddef.h>
(bien avant#include <libio.h>
), de sortestddef.h
était certainement inclus. Cependant, après une inspection plus poussée,stddef.h
était complètement vide avec une taille de fichier de 1 octet. Cela a été vrai pourstddef.h
dans mon sysroot et sur mon ordinateur hôte. Je n'ai aucune idée de pourquoi ces fichiers étaient vides.De toute façon, il s'avère que j'ai eu une étrangère
INCLUDEPATH += /usr/include/linux
dans mon .fichier pro. Sur mon Linux de la machine, ceci ajouté-I/usr/include/linux
pour le Makefile généré par qmake. Sur mon Windows à créer de la machine, ceci ajouté-isystem /usr/include/linux
pour le Makefile généré par qmake. Une fois que j'ai commenté, ces lignes ont été supprimées à partir de la Makefiles et il construites sur les deux construire des machines.-isystem /usr/include/linux
apparemment jamais causé aucun problème sur Windows machine de compilation, donc il n'y a pas de mal à l'enleverINCLUDEPATH += /usr/include/linux
.Je ne sais vraiment pas pourquoi cela a réglé mon problème, mais je soupçonne que c'était une sorte de conflit entre les fichiers d'en-tête. C'était peut-être le mélange de l'hôte fichiers d'en-tête avec sysroot fichiers d'en-tête, ou la création d'une dépendance circulaire en quelque sorte. GCC documentation dit que tout inclus avec le
-I
option aura la priorité sur un système de fichier d'en-tête. Mon meilleur conseil pour résoudre ce problème est de prendre un coup d'oeil dur à exactement quels fichiers d'en-tête sont inclus et d'où ils viennent.