Linux 内核编译报错及解决办法记录

Linux 内核编译报错及解决办法记录

  1. Can’t use ‘defined(@array)’ (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
    在这里插入图片描述
    根据错误的提示信息,Maybe you should just omit the defined()(也许你该删除define),然后打开该文件跳转到指定行数,删除define,修改后如下图所示
    在这里插入图片描述
  2. include/linux/netfilter_ipv4/ipt_ECN.h:13: fatal error: linux/netfilter/xt_dscp.h: No such file or directory
    在这里插入图片描述
    根据错误信息,提示找不到该文件,在当前目录下搜索下该文件,不区分大小写 grep -rn xt_dscp.h,结果如下图所示,可见在该文件夹内存在同名的文件,只是大小写不一样,而linux是大小写敏感的,因此提示找不到该文件,先简单的处理下,在该文件同一目录下新建一个同名小写的文件 cp include/linux/netfilter/xt_DSCP.h include/linux/netfilter/xt_dscp.h
    在这里插入图片描述
    按照上述方法修改完成后,继续执行make zImage进行编译,不出所料继续报错,如下图所示
    在这里插入图片描述
    这是由于该文件夹是在Windows下解压然后直接拷贝到ubuntu下,由于Windows是大小写不敏感的,其会导致部分文件丢失和被更改,重新将内核源码压缩式拷贝到ubuntu,然后进行解压,解压完成后,执行grep -rn xt_dscp.h对上述分析进行验证,结果如下所示,在内核文件中确实存在同名但是大小写不一样的xt_DSCP.h xt_dscp.h两个文件
    在这里插入图片描述
    然后重新执行make zImage,顺利完成镜像编译,如下图所示在这里插入图片描述
    3.fatal error: gmp.h: 没有那个文件或目录
    在这里插入图片描述
    解决办法:sudo apt-get install libgmp-dev
    注:GMP(The GNU Multiple Precision Arithmetic Library)又叫GNU多精度算术库,是一个提供了很多操作高精度的大整数,浮点数的运算的算术库,几乎没有什么精度方面的限制,功能丰富。我刚接触到这个东西的时候是在学习PHP的过程中。GMP的主要目标应用领域是密码学的应用和研究、 互联网安全应用、 代数系统、 计算代数研究等。

4.fatal error: mpc.h: 没有那个文件或目录
在这里插入图片描述
解决方法:sudo apt-get install libmpc-dev
注:MPC(Library for the arithmetic of complex numbers with arbitrarily high precision)任意高精度复数算法库

### ARM Linux 下 Memtester 交叉编译解决方案 在 ARM Linux 平台下进行 `memtester` 的交叉编译时,可能会遇到多种错误。以下是针对常见问题及其解决方案的详细说明。 #### 错误一:头文件缺失 如果在编译过程中提示某些头文件未找到,则可能是源码中的部分依赖项不完整或路径配置有误。可以通过修改源代码来解决此问题。例如,在解压后的 `memtester-4.3.0` 文件夹中编辑 `tests.h` 文件,并在其顶部添加以下内容: ```c #include <stddef.h> ``` 完成上述操作后重新尝试编译[^1]。 --- #### 错误二:目标平台架构不匹配 当生成的目标文件无法在目标平台上运行并抛出类似于 `/system/bin/sh: ./a.out: not executable: 64-bit ELF file` 的错误时,这通常表明使用的工具链与目标硬件架构不符。确保选用适合目标系统的交叉编译器版本(如 `arm-linux-gnueabihf-gcc` 或 `aarch64-linux-gnu-gcc`),并通过指定静态链接选项避免动态库兼容性问题。具体命令如下所示: ```bash arm-linux-gnueabihf-gcc -o memtester *.c *.h --static ``` 通过加入 `--static` 参数可以减少因缺少动态库而导致的问题[^4]。 --- #### 错误三:运行时找不到程序 (`not found`) 即使成功完成了编译过程,但在实际部署至开发板之后仍然可能出现 “command not found” 类型的警告消息。这种情况往往源于目标环境中缺乏必要的支持库资源。按照以下方法调整根文件系统结构能够有效缓解此类状况: 1. 创建一个新的目录用于存储所需的共享对象; 2. 将交叉编译环境下的标准 C 库以及关联子目录复制过去; 示例脚本片段如下: ```bash mkdir /resource cp -rfv /path/to/toolchain/aarch64-linux-gnu/libc . cp -rfv /path/to/toolchain/aarch64-linux-gnu/lib64 . ``` 注意替换其中涉及的具体路径变量以适配个人工作区布局[^3]。 --- #### 错误四:调试信息不足影响定位效率 为了更方便排查潜在缺陷或者记录日志数据流走向,建议在构建自定义内核镜像阶段引入额外标志位控制编译行为。比如向 Makefile 中追加 `-g` 开启符号表保留功能以便后续借助 GDB 调试分析复杂场景逻辑链条[^2]。 最终综合以上各要点形成的典型流程概览大致如下所列: ```bash tar -xf memtester-4.3.0.tar.gz && cd memtester-4.3.0/ sed -i '1s/^/#include <stddef.h>\n/' tests.h arm-linux-gnueabihf-gcc -o memtester *.c *.h --static scp memtester root@<target-ip>:/tmp/memtester ssh root@<target-ip> "/tmp/memtester" ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值