Linux编译内核遇到找不到linux/limits.h的问题

这几天在编译新内核,在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 ~~~~泪奔啊~~~


<think>好的,我现在需要帮助用户解决GDB调试时不到core文件的问题。用户提到在ARM Linux gnueabihf环境下出现“netmgr core.1234 no such file or directory”的错误。首先,我需要回顾一下相关知识,然后逐步分析可能的原因和解决方案。 首先,core文件是程序崩溃时生成的内存转储文件,用于调试。GDB需要这个文件来分析崩溃原因。如果GDB不到core文件,可能的原因包括: 1. **core文件未生成**:系统可能没有配置生成core文件,或者生成路径不正确。 2. **权限问题**:core文件可能生成在受限制的目录,或者用户权限不足。 3. **文件名或路径不匹配**:用户指定的core文件名或路径与实际生成的位置不同。 4. **文件系统问题**:core文件可能被删除或存储位置不可访问。 接下来,我需要根据这些可能的原因,逐一排查并提供解决方案。同时,结合用户提供的引用资料,特别是引用[3]中提到设置debug-file-directory的方法,可能需要调整GDB的搜索路径。此外,用户的环境是ARM Linux,可能涉及交叉编译或嵌入式系统的特殊配置,需要特别注意路径和权限问题。 具体步骤可能包括: 1. 检查系统是否允许生成core文件,通过ulimit命令查看和设置。 2. 确认core文件的生成路径,检查系统配置如/proc/sys/kernel/core_pattern。 3. 检查文件权限和存储位置,确保用户有读取权限。 4. 在GDB中正确指定core文件的路径和名称,或者调整搜索路径。 同时,用户的问题可能涉及到交叉编译环境下的路径问题,类似引用[4]中提到的头文件缺失问题,可能需要确认core文件是否生成在预期的目录下,或者是否被其他进程移动或删除。 最后,需要验证解决方案的有效性,并生成相关问题,帮助用户进一步排查其他可能的问题。</think>### GDB调试时不到core文件的解决方案 #### 1. 确认core文件生成状态 - **检查系统core文件限制** 执行命令查看当前core文件大小限制: ```bash ulimit -c ``` 若返回值为`0`,说明系统未开启core文件生成。通过以下命令临时启用: ```bash ulimit -c unlimited ``` 永久生效需在`/etc/security/limits.conf`添加配置[^3]。 - **验证core文件生成路径** 检查内核参数`core_pattern`的配置: ```bash cat /proc/sys/kernel/core_pattern ``` 若路径包含变量(如`/var/crash/core.%e.%p`),需根据实际路径查文件[^3]。 --- #### 2. 解决路径与权限问题 - **检查文件系统权限** - core文件默认生成在程序崩溃时的当前目录。若目录权限不足(如`/`根目录),尝试修改生成路径: ```bash sysctl -w kernel.core_pattern=/tmp/core-%e.%p ``` - 确保目标目录(如`/tmp`)有写入权限。 - **指定core文件绝对路径** 在GDB中加载core文件时,使用绝对路径: ```bash gdb /path/to/executable /tmp/core.1234 ``` --- #### 3. ARM嵌入式系统特殊配置 - **交叉调试环境适配** 若在交叉编译环境中调试(如ARM Linux),需确认: 1. core文件是否生成到SD卡或可写存储设备 2. 使用`set debug-file-directory`指定调试符号路径[^3]: ```bash (gdb) set debug-file-directory /path/to/debug/files ``` - **文件系统挂载检查** 确保生成core文件的目录已正确挂载且非只读模式。 --- #### 4. 验证与调试 - **手动触发core文件生成** 通过`kill -ABRT <pid>`强制生成core文件,确认路径和权限有效性。 - **检查文件系统空间** 使用`df -h`确认存储空间充足,避免因空间不足导致生成失败。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值