如何从另一个目录中包含 headers(但不知道是哪个目录)

How to include headers from another directory (but not knowing which)

我正在尝试编译模块。我可以通过调用 make 来实现,它调用

make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

但我想看到预处理后的输出,所以我尝试用 cc -E file.c 手动编译。问题是,它看不到 header <linux/init.h>:

fatal error: linux/init.h: No such file or directory
 #include <linux/init.h>

我注意到,调用make时,它首先进入这个目录/usr/src/linux-headers-5.0.0-38-generic,那里可能是header,但我不知道在哪里。我试过了gcc -E -I'/usr/src/linux-headers-5.0.0-38-generic file.c,还是一样的错误。那么如何在用户模式中包含内核 headers(<linux/init.h> is)——这就是如何从另一个目录包含 headers?

PS:正如@uzsolt 在评论中所建议的那样,我将 include 添加到路径的末尾:gcc -I /usr/src/linux-headers-5.0.0-38-generic/include。但是然后另一个 header 丢失了 - <asm/linkage.h>,而且 - 我不知道这个 header 是什么目录。

你应该使用 find 命令:find /usr/src/linux-headers-5.0.0-38-generic -name MISSED_FILE.

我不知道你的 linux 分布,但我认为你应该将这些参数添加到 gcc:

-I/usr/src/linux-headers-5.0.0-38-generic/include -I/usr/src/linux-aws-headers-5.3.0-1003/arch/x86/include/