关于linux:C程序无法找到某些包含的头文件,尽管它们存在

C program can't find some included header files though they exist

我正在尝试使用此gcc命令编译程序:

1
gcc -c -fomit-frame-pointer -O2 sth.c

这些头文件包括:

1
2
3
4
5
6
7
#include <linux/kernel.h>    //line 1
#include <linux/module.h>    //line 2
#include <sys/syscall.h>     //line 3
#include <linux/proc_fs.h>   //line 4
#include <linux/types.h>     //line 5
#include <linux/dirent.h>    //line 6
#include       //line 7

我发现第2,4和6行出现"no such file or directory"错误,尽管它们与其他4一样位于/usr/src/kernels/3.10.14-100.fc18.x86_64/include/linux/中。

我在之前(使用Makefiles)(fedora 18)之前已经在该系统上编译了一些其他程序,其中包括内核头文件,而且我敢肯定,例如对于dirent.hproc_fs.h,不会出现此类错误。
我认为也许我应该对那些Makefile中考虑过的gcc使用其他一些选项!

安装了与我正在运行的内核相同版本的kernel-headerfileskernel-devel软件包。


用户空间内核头文件位于/usr/include/linux中,而不位于/usr/src/...中。 后一个路径包含用于内核模块的头文件,而不是用于用户空间程序的头文件。

如果程序有问题,实际上是内核模块,则需要使用KBuild对其进行编译,因为内核模块需要特殊的构建环境。 请参阅:了解什么是KBuild

还可以看看:

1
/usr/src/linux/Documentation/kbuild/modules.txt