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

编译mbedtls的ssl_client1.c时出现mbedtls_test_cas_pem链接错误

编译mbedtls ssl_client1.c 链接失败问题

问题详情

编译命令:

g++ -I/home/pi/dev/mbedtls/mbedtls/include \
    -I/home/pi/dev/mbedtls/mbedtls/tests/include \
    -I/home/pi/dev/mbedtls/mbedtls/tests/include/test \
    -L/home/pi/dev/mbedtls/mbedtls/library \
    ssl_client1.c \
    -lmbedtls -lmbedx509 -lmbedcrypto

链接报错:

ssl_client1.c:(.text+0x158): undefined reference to `mbedtls_test_cas_pem_len'
/usr/bin/ld: ssl_client1.c:(.text+0x15c): undefined reference to `mbedtls_test_cas_pem_len'
/usr/bin/ld: ssl_client1.c:(.text+0x16c): undefined reference to `mbedtls_test_cas_pem'
/usr/bin/ld: ssl_client1.c:(.text+0x170): undefined reference to `mbedtls_test_cas_pem'

已知信息:

  • 上述未定义符号的声明在/home/pi/dev/mbedtls/mbedtls/tests/include/test/tests.h中,但无对应测试库可链接
  • 已开启MBEDTLS_PEM_PARSE_C编译选项

解决方法

方法1:替换测试证书为自定义证书

ssl_client1.c是测试示例,依赖测试库内置的证书数据。可以修改代码替换证书引用:

  • 准备PEM格式的CA证书文件(如ca_cert.pem)
  • 在代码中读取该文件内容,或者直接将证书内容定义为字符串常量,替换原有的mbedtls_test_cas_pem和mbedtls_test_cas_pem_len引用

方法2:编译测试证书源文件并链接

mbedtls的测试证书定义在测试源码中,可将其编译后参与链接:

  1. 找到包含mbedtls_test_cas_pem定义的源文件(通常在/home/pi/dev/mbedtls/mbedtls/tests/src/下,如test_certs.c)
  2. 编译该源文件为目标文件,再和ssl_client1.c一起链接:
# 编译测试证书源文件
gcc -c /home/pi/dev/mbedtls/mbedtls/tests/src/test_certs.c -I/home/pi/dev/mbedtls/mbedtls/include -I/home/pi/dev/mbedtls/mbedtls/tests/include
# 完成链接
g++ -I/home/pi/dev/mbedtls/mbedtls/include \
    -I/home/pi/dev/mbedtls/mbedtls/tests/include \
    -I/home/pi/dev/mbedtls/mbedtls/tests/include/test \
    -L/home/pi/dev/mbedtls/mbedtls/library \
    ssl_client1.c test_certs.o \
    -lmbedtls -lmbedx509 -lmbedcrypto

方法3:使用非测试版客户端示例

若无需测试功能,可改用mbedtls提供的正式客户端示例(如programs/ssl/ssl_client2.c),这类示例不依赖测试库符号,可直接使用系统证书或自定义证书。

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

相关产品推荐
方舟 Agent Plan

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

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