Cygwin gcc 找不到 stdio.h

Cygwin gcc cannot find stdio.h

我的 64 位 Win7 上有一个 64 位的 Cygwin。
我安装了 gcc-core 和 gcc-g++ 包。
我做了一个简单的C程序:

#include <stdio.h>
int main() {
  exit(0);
}

当我编译时:gcc-c test.c 我得到:
fatal error: stdio.h: No such file or directory

-v 标志做我看到:

#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include
 /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include-fixed
 /usr/include
 /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/../include/w32api
End of search list.
GNU C (GCC) version 4.8.3 (x86_64-pc-cygwin) 

gcc-core 包附带的 stdio.h 出现在我的电脑上的这个位置(根据 Cygwin 的包搜索器也很好):
/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/include/ssp/stdio.h

ssp 目录是什么意思,为什么 stdio.h 放在那里?
为什么 gcc 在这个位置找不到 stdio.h

您在 ssp 目录中找到的文件不是 <stdio.h> 的版本。它仅包含有关 <stdio.h> 中某些函数的额外信息,用于 gcc 中的堆栈粉碎保护器功能。

实际的<stdio.h>应该在/usr/include.

-v 输出中的这一行非常有趣:

/usr/inlude

你是怎么得到一个没有 c/usr/inlude 的?

糟糕,inlude 中缺少的 c 已在 Keith Thompson 的编辑中删除。

所以你的 gcc 应该可以找到 /usr/include/stdio.h 如果你有的话。它在那里吗?据我从包文件列表中可以看出,它应该是 cygwin 基本系统的一部分(即,即使您没有安装编译器,它也应该在那里)。

您是否缺少任何其他头文件? <stdlib.h><string.h> 是很好的测试候选人。

这里有一些命令来调查 cygwin 包以及它是否包含文件:

cygcheck -f /usr/include/stdio.h
cygcheck -c cygwin
cygcheck -l cygwin | grep stdio

更新: 所以看来我落伍了,现在有一个 cygwin-devel 包。头文件不再位于基础 cygwin 包中。要在最新的 cygwin 上检查正确的包,您可以使用

cygcheck -c cygwin-devel

正如评论中已经完成的那样。由于它被列为 "incomplete",解决方案可能是使用 cygwin 的安装程序重新安装它。