如何从另一个目录中包含 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/
我正在尝试编译模块。我可以通过调用 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/