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 的安装程序重新安装它。
我的 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 的安装程序重新安装它。