GCC linaro编译器抛出错误“unknown type name size_t”

我正在使用GCC Linaro编译器来编译我的代码。 它从libio.h抛出错误unknown type name size_t 。 它包含在stdio.h 。 在我的代码中,我只包括stdio.h

可以请任何人如何解决此错误。

根据C99,§7.17, size_t不是内置类型,而是在定义。

包括标题应该可以解决您的问题。

对于它的价值,我在QT项目中遇到了同样的问题,我使用Linaro编译器(在x86 Windows和x86 Linux上)为ARM Linux构建。 使用完全相同的代码和.pro文件,我在Windows上构建时没有任何问题,但我在Linux机器上构建了一连串的错误,从libio.h unknown type name 'size_t' libio.h ,追溯到#include 。 我查看了stdio.h (在sysroot中用于目标硬件,而不是在主机上),几行是#include (很多时候是#include ),所以stddef.h肯定会被收录。 但是,经过进一步检查, stddef.h完全为空,文件大小为1个字节。 对于我的sysroot和主机上的stddef.h ,这是真的。 我不知道为什么这些文件是空的。

无论如何,事实certificate我的.pro文件中有一个无关的INCLUDEPATH += /usr/include/linux 。 在我的Linux构建机器上,这将-I/usr/include/linux到qmake生成的Makefile中。 在我的Windows构建机器上,这个将-isystem /usr/include/linux到qmake生成的Makefile中。 一旦我对此进行了评论,就会从Makefile中删除这些行,并在两台构建机器上构建它们。 -isystem /usr/include/linux显然从未在Windows构建机器上造成任何麻烦,因此删除INCLUDEPATH += /usr/include/linux没有任何害处。

我真的不知道为什么这解决了我的问题,但我怀疑它是头文件之间的某种冲突。 也许它是将主机头文件与sysroot头文件混合,或以某种方式创建循环依赖。 GCC文档说, -I选项中包含的任何内容都将优先于系统头文件。 我对此问题的最佳建议是仔细查看包含哪些头文件以及它们来自何处。