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

ras*_*hok 20 c gcc compiler-errors size-t linaro

我正在使用GCC Linaro编译器来编译我的代码.它引发错误unknown type name size_tlibio.h.它包括在内stdio.h.在我的代码中,我只是包括在内stdio.h.

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

小智 39

根据C99,§7.17,size_t不是内置类型,而是在中定义<stddef.h>.

包括<stddef.h>标题应该可以解决您的问题.

  • 它也在 `&lt;stdio.h&gt;` 和其他几个标准头文件中定义。这个问题没有给我们足够的信息来确定编译器抱怨的原因。 (2认同)

yan*_*ano 5

就其价值而言,我在QT项目中遇到了完全相同的问题,在该项目中,我使用Linaro编译器(在x86 Windows和x86 Linux上)为ARM Linux构建。使用完全相同的代码和.pro文件,我没有问题,建立在Windows,但我有错误,构建在Linux中一连串的,与开始unknown type name 'size_t'libio.h其中追溯到#include <stdio.h>。我查看了stdio.h(在sysroot中查看目标硬件,而不是在主机上),然后向下几行#include <stddef.h>(很早之前#include <libio.h>),所以stddef.h肯定包含了其中几行。但是,经过进一步检查,stddef.h文件大小为1字节的文件完全为空。stddef.h在我的sysroot和主机上都是如此。我不知道为什么这些文件为空。

无论如何,事实证明我的INCLUDEPATH += /usr/include/linux.pro文件中有一个多余的东西。在我的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选项包含的所有内容都将优先于系统头文件。对于这个问题,我最好的建议是仔细查看到底包含了哪些头文件以及它们来自何处。