You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译带OpenSSL的U-Boot报错:无法找到OpenSSL函数体

解决U-Boot编译时OpenSSL链接错误的方案

以下是针对你遇到的链接错误问题的具体解决步骤:

1. 修正编译命令的参数顺序

链接器对参数顺序有严格要求,依赖库需要放在引用它的目标文件之后。你之前将-lcrypto作为make的直接参数,无法被正确传递到链接阶段的正确位置。修改编译命令如下:

LDFLAGS="-L/home/user/opensslArm/lib -lcrypto" CFLAGS="-I/home/user/opensslArm/include" make ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

2. 检查OpenSSL版本兼容性

U-Boot的vboot模块对OpenSSL版本有依赖,若你编译的是OpenSSL 3.x系列,其API与1.1.x系列存在较大差异,可能导致符号找不到。建议:

  • 切换到OpenSSL 1.1.1分支重新编译(该版本为长期支持版,与多数U-Boot分支兼容)
  • 或同步使用U-Boot稳定分支(如v2023.10),确保代码与OpenSSL版本匹配

3. 确认U-Boot配置中的OpenSSL选项

执行make menuconfig进入配置界面,在Security options中检查:

  • 勾选Enable support for OpenSSL
  • 勾选Use external OpenSSL library(确保U-Boot使用你交叉编译的外部库,而非内置的mbedtls等替代实现)

4. 验证交叉编译库的架构正确性

用交叉编译工具链的file命令检查库的架构,避免编译出x86架构的库:

/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-file /home/user/opensslArm/lib/libcrypto.so

正确输出应为类似ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked...的ARM架构标识。

内容的提问来源于stack exchange,提问作者ter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:15:01