学习笔记:编译内核scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory

编译内核命令

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-



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

你已经找到了关键线索! > ❗ 你的 `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 ``` 干净、清晰、易复用。 --- ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值