ras*_*hok 20 c gcc compiler-errors size-t linaro
我正在使用GCC Linaro编译器来编译我的代码.它引发错误unknown type name size_t的libio.h.它包括在内stdio.h.在我的代码中,我只是包括在内stdio.h.
任何人都可以请如何解决此错误.
小智 39
根据C99,§7.17,size_t不是内置类型,而是在中定义<stddef.h>.
包括<stddef.h>标题应该可以解决您的问题.
就其价值而言,我在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选项包含的所有内容都将优先于系统头文件。对于这个问题,我最好的建议是仔细查看到底包含了哪些头文件以及它们来自何处。
| 归档时间: |
|
| 查看次数: |
44384 次 |
| 最近记录: |