You need to enable JavaScript to run this app. ARMv7架构NAS编译ps3netsrv遇mbedTLS未定义引用错误的咨询
优惠活动
大模型
产品
解决方案
定价
更多

ARMv7架构NAS编译ps3netsrv遇mbedTLS未定义引用错误的咨询

问题核心根因

这类链接阶段的undefined reference报错,核心是两层版本与配置不匹配:

  • 当前拉取的mbedTLS为3.x以上新版本,该版本默认裁剪了ps3netsrv源码调用的2.x系列 legacy AES应用层API,包括mbedtls_aes_setkey_dec、mbedtls_aes_setkey_enc、mbedtls_aes_crypt_cbc,这类接口默认不会被编译进生成的库文件
  • 源码中带_ALT后缀的注释函数是mbedTLS预留的硬件加密加速替代接口,与ps3netsrv调用的普通软件实现分属不同接口体系,取消注释这类接口无法补充普通API的缺失
分步解决方案

1. 替换匹配版本的mbedTLS依赖

移除当前使用的3.x版本mbedTLS,替换为ps3netsrv适配的mbedTLS 2.28.x LTS长期支持版本,该版本完整保留兼容旧调用逻辑的AES接口,不存在函数缺失问题。

2. 交叉编译适配ARMv7架构的mbedTLS库

  • 解压对应版本源码后,修改include/mbedtls/mbedtls_config.h,开启必需的宏开关,避免API被额外裁剪:
    • MBEDTLS_AES_C
    • MBEDTLS_CIPHER_MODE_CBC
  • 使用适配Cortex-A9核心的ARM交叉编译工具链编译mbedTLS,仅需要生成crypto模块的静态库libmbedcrypto.a(上述报错涉及的所有AES函数都归属该模块,不需要额外链接mbedTLS的其他模块),将生成的库文件复制到ps3netsrv源码根目录。

3. 修正ps3netsrv的Makefile配置

当前Makefile存在两处关键遗漏,是直接导致链接失败的操作问题:

  • 未添加mbedTLS库的链接参数:现有链接命令仅包含-lstdc++ -lpthread,需要在链接参数的最后补充-lmbedcrypto
  • 库路径指向错误:确保编译命令中的-L参数指向你自行编译的ARM版mbedTLS库所在路径,不要误用系统x86路径下的mbedTLS库

4. 验证编译流程

修改完成后重新执行编译,最终生成可执行文件的链接命令应当符合以下格式:
cc -Wall -I. -std=gnu99 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -L. -o ps3netsrv main.o padlock.o aes.o compat.o Console.o File.o VIsoFile.o -lstdc++ -lpthread -lmbedcrypto

排坑提示
  • 不要强行在3.x版本mbedTLS上启用被注释的旧接口,3.x版本对底层AES实现做了大规模重构,对齐旧接口需要改动大量源码逻辑,直接替换2.28.x版本的成本远低于代码适配成本
  • 不要使用系统软件仓库提供的mbedTLS安装包做交叉编译,这类包为x86架构编译,与ARM NAS平台不兼容
  • 如需在NAS上直接运行编译产物,可在链接阶段直接指定mbedcrypto静态库路径,实现无依赖的静态链接,避免在NAS上额外安装第三方库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 08:57:11