scripts/extract-cert.c:21:25: fatal error: openssl/bio.h

报错问题 1:scripts/extract-cert.c:21:25: fatal error: openssl/bio.h

报错原因:

编译内核命令:make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

出现fatal error: openssl/名单.h: No such file or directory。原因是libssl-dev~没有安装

libssl-dev包含libraries, header files and manpages,是openssl的一部分

解决方法:

sudo apt-get install libssl-dev

报错问题 2:

$ sudo apt-get install libssl-dev
Reading package lists... Done
Building dependency tree     
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
 libssl-dev : Depends: libssl1.0.0 (= 1.0.1-4ubuntu5) but 1.0.1-4ubuntu5.3 is to be installed
              Recommends: libssl-d
你已经找到了关键线索! > ❗ 你的 `ssl-common.h` 文件 **不在 `certs/` 目录中**,而是在: ```text /home/user/nvr8064/nvt98635/linux-6.12.46/scripts/ssl-common.h ``` 但源文件 `extract-cert.c` 中写的是: ```c #include "ssl-common.h" ``` 所以编译器会根据 `-I` 指定的路径去查找这个头文件。 而你现在没有把 `scripts/` 目录加入搜索路径,自然就报错了: ```text fatal error: ssl-common.h: No such file or directory ``` --- ## ✅ 正确解决方案:添加 `-I.../scripts` 到编译命令 ### ✅ 修改后的正确编译命令: ```bash gcc \ -I/home/user/nvr8064/nvt98635/linux-6.12.46/scripts \ -I/usr/include/openssl \ -DOPENSSL_API_COMPAT=0x10101000UL \ -o extract-cert \ extract-cert.c \ -lcrypto ``` --- ## 🔍 原因详解 | 文件 | 路径 | |------|------| | `extract-cert.c` | `.../certs/extract-cert.c` | | `ssl-common.h` | `.../scripts/ssl-common.h` | 虽然它们在不同目录,但在内核构建系统中,通过 Makefile 设置了正确的头文件搜索路径(自动包含 `scripts/`),所以能正常编译。 但你在 **脱离内核构建系统** 的情况下独立编译时,必须手动补上这些路径。 --- ## ✅ 验证步骤(推荐执行一遍) ```bash # 1. 确认 ssl-common.h 存在 ls -l /home/user/nvr8064/nvt98635/linux-6.12.46/scripts/ssl-common.h # 应该输出类似: # -rw-r--r-- 1 user user 2156 Jan 1 12:34 /home/user/nvr8064/nvt98635/linux-6.12.46/scripts/ssl-common.h ``` ```bash # 2. 进入测试目录 cd ~/test-extract-cert ``` ```bash # 3. 使用正确路径重新编译 gcc \ -I/home/user/nvr8064/nvt98635/linux-6.12.46/scripts \ -I/usr/include/openssl \ -DOPENSSL_API_COMPAT=0x10101000UL \ -o extract-cert \ extract-cert.c \ -lcrypto ``` --- ## ✅ 成功标志 如果不再报错,并生成了可执行文件: ```bash ./extract-cert --help ``` 输出类似: ```text Usage: extract-cert [-d] <vmlinux> <x509_certificate> ``` 🎉 恭喜!你已成功独立编译出 `extract-cert` 工具! --- ## 💡 小贴士:为什么内核源码要把头文件放 `scripts/`? 因为: - `ssl-common.h` 是一组用于 **构建阶段工具**(如 `extract-cert`, `sign-file`)的公共定义 - 它不属于运行时内核代码,而是构建脚本相关的辅助头 - 所以放在 `scripts/` 下是合理的 但这对脱离构建系统的用户造成了困扰 —— 必须知道它的真实位置。 --- ## ✅ 推荐设置环境变量简化操作 ```bash export KDIR=/home/user/nvr8064/nvt98635/linux-6.12.46 export HOSTCFLAGS="-I$KDIR/scripts -I/usr/include/openssl -DOPENSSL_API_COMPAT=0x10101000UL" ``` 以后只需: ```bash gcc $HOSTCFLAGS -o extract-cert extract-cert.c -lcrypto ``` 干净、清晰、易复用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值