centos7内核模块编译报错
问题背景
使用Makefile完成Linux内核模块程序的编译,出现了一下问题
代码结构
|-firewall
|------log.h
|------log.c
|------demo.c // 引入log.h
|------Makefile
Makefile
文件
ifneq ($(KERNELRELEASE),)
obj-m += firewall.o
firewall-objs := demo.o log.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD:= $(shell pwd)
SUBDIRS := log
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
报错
make -C /lib/modules/3.10.0-693.el7.x86_64/build M=/root/work/firewall/source modules
make[1]: 进入目录“/usr/src/kernels/3.10.0-693.el7.x86_64”
CC [M] /root/work/firewall/source/demo.o
In file included from /root/work/firewall/source/demo.c:7:0:
/root/work/firewall/source/log.h:4:19: 致命错误:stdio.h:没有那个文件或目录
#include <stdio.h>
^
编译中断。
make[2]: *** [/root/work/firewall/source/demo.o] 错误 1
make[1]: *** [_module_/root/work/firewall/source] 错误 2
make[1]: 离开目录“/usr/src/kernels/3.10.0-693.el7.x86_64”
make: *** [all] 错误 2
由上述可知,报错原因致命错误:stdio.h:没有那个文件或目录
,但是系统是包含stdio.h
文件的,位置在
find / -name "stdio.h"
/usr/include/bits/stdio.h
/usr/include/stdio.h
并且执行gcc -c test.c
是成功的,文件内容如下
/*
*@file test.c 测试stdio.h存在于系统
*/
#include <stdio.h>
int main() {
}
问题
综上所述,根本原因不是缺少stdio.h
文件,而是Makefile文件有问题,哪位大神能指点一下?(打字不易,非诚勿扰)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你不可以在内核模块中引用 stdio.h,因为它仅用于应用程序,它的实现依赖于
等第三方库。