这几天在编译新内核,在make menuconfig 的时候老是报下面这个错误:
HOSTCC scripts/basic/fixdep
In file included from /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:160:0,
from /usr/include/limits.h:143,
from /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/limits.h:168,
from /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/syslimits.h:7,
from /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed/limits.h:34,
from scripts/basic/fixdep.c:114:
/usr/include/x86_64-linux-gnu/bits/local_lim.h:38:26: fatal error: linux/limits.h: 没有那个文件或目录
#include <linux/limits.h>
^
compilation terminated.
make[1]: *** [scripts/basic/fixdep] 错误 1
make: *** [scripts_basic] 错误 2
在网上搜了好久,很多人遇到这个错误,可是就是找不到合适的解决方案。今天在濒临暴走之前找实验室一大神童鞋请教,终于在半小时内搞定了。
问题解决过程:
1)提示找不到linux/limits.h,即/usr/include/linux/路径下没有limits.h这个文件,想到可能是少了某个包,接下来的任务就是找到生成这个路径下limits.h文件的包;
2)两个需要掌握的命令:dpkg -l 打印出系统中安装的所有包; dpkg -L 包名 打印出该包生成的所有文件及其路径。
3)考虑到一般的头文件都是由 “XXX-dev” 这样名字的包生成的。于是首先用命令dpkg -l |grep "dev" 标出那些候选,就几个;
4)然后将候选的几个包,用dpkg -L 包名 | grep "linux/limits.h" 打印结果,有结果的即为正确的包。最后定位到包 “linux-libc-dev:amd64” ;
5)以为没有这个包,于是直接安装 apt-get install linux-libc-dev:amd64。但发现并没有更新任何软件包。意思是安装了这个包,但是却没有在/usr/include/linux/路径下生成应该生成的limits.h文件。于是考虑将linux-libc-dev:amd64卸载后再重新安装。注意在卸载linux-libc-dev:amd64的时候还会卸载相关的几个包(大概7个左右,具体忘记了)。等卸载完成后,apt-get install linux-libc-dev:amd64,安装包,之后再将之前卸载的那几个相关的包一一安装上;
6)都安装好后再 make menuconfig,成功!!!大功告成啦。。。。。。。
折腾了好几天的问题终于解决了!!OMG ~~~~泪奔啊~~~