编译ext2外置内核模块时make执行报ld: no input files错误求解
错误原因及修复方案
核心错误点
你的内核模块Makefile的多源文件声明不符合Linux内核构建系统规则:内核构建系统要求 <模块名>-y 变量后指定编译后的目标文件(.o后缀),而非源文件(.c后缀)。你当前写的hijj-y := super.c acl.c ...属于语法错误,构建系统无法将这些.c文件识别为需要编译的输入,链接hijj.o时找不到任何可输入的目标文件,就抛出了ld: no input files报错。
修复方法
把hijj-y后所有的.c后缀修改为.o即可,修改后的对应行如下:
hijj-y := super.o acl.o balloc.o dir.o file.o ialloc.o inode.o ioctl.o namei.o symlink.o xattr.o xattr_security.o xattr_trusted.o xattr_user.o
其他可选检查项
- 确认列出的所有.c源文件都存在于当前Makefile所在目录,无拼写错误、路径错误
- 清理之前的构建缓存后再重新编译:执行
make clean && make - 确认当前编译使用的内核头文件版本和要插入模块的内核版本完全一致,你当前用的是5.13.0-21-generic的头文件,不要给其他版本内核安装该模块
内容的提问来源于stack exchange,提问作者user786
相关产品推荐
相关产品推荐

