Cygwin gcc找不到stdio.h

时间:2015-01-07 16:37:28

标签: gcc cygwin

我的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

1 个答案:

答案 0 :(得分:3)

您在ssp目录中找到的文件不是<stdio.h>的版本。它仅包含有关gcc中stack-smash protector功能的<stdio.h>中某些功能的额外信息。

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

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

/usr/inlude

你是如何获得没有/usr/inlude的{​​{1}}的?

哎呀,Keith Thompson在编辑中删除了c中缺失的c

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

您是否遗漏了其他任何头文件? /usr/include/stdio.h<stdlib.h>是很好的考试候选人。

以下是一些调查cygwin包的命令,以及它是否包含文件:

<string.h>

更新:所以我似乎落后于时代,现在有cygcheck -f /usr/include/stdio.h cygcheck -c cygwin cygcheck -l cygwin | grep stdio 个套餐。头文件不再位于基本cygwin-devel包中。要检查最新cygwin上的正确包,您可以使用

cygwin

正如评论中所做的那样。因为它被列为&#34;不完整&#34;解决方案可能是使用cygwin的安装程序重新安装它。