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

链接mbedtls库时出现未定义引用错误,如何解决?

编译mbedtls应用时出现未定义引用错误的修复方法

我用mbedtls写了个简单应用,编译时碰到下面的链接错误,该怎么修复?是不是需要链接其他库?

编译错误信息

开始构建...
/usr/bin/g++ -fdiagnostics-color=always -g /home/g/projects/aes2/AES_generate.c -o /home/g/projects/aes2/AES_generate -lmbedtls

/usr/bin/ld: /tmp/ccvPvJJH.o: in function `main':
/home/g/projects/aes2/AES_generate.c:19: undefined reference to `mbedtls_entropy_init'
/usr/bin/ld: /home/g/projects/aes2/AES_generate.c:21: undefined reference to `mbedtls_ctr_drbg_init'
/usr/bin/ld: /home/g/projects/aes2/AES_generate.c:23: undefined reference to `mbedtls_entropy_func'
/usr/bin/ld: /home/g/projects/aes2/AES_generate.c:23: undefined reference to `mbedtls_ctr_drbg_seed'
/usr/bin/ld: /home/g/projects/aes2/AES_generate.c:30: undefined reference to `mbedtls_ctr_drbg_random'
collect2: error: ld returned 1 exit status

程序代码

#include "mbedtls/entropy.h"
#include "mbedtls/ctr_drbg.h"
#include <string.h>
#include <stdio.h>

#if !defined(MBEDTLS_PSA_CRYPTO_C)
define MBEDTLS_PSA_CRYPTO_C
#endif

mbedtls_ctr_drbg_context ctr_drbg;
mbedtls_entropy_context entropy;
unsigned char key[32];

char const *pers = "aes generate key";
int ret;

int main()
{
    mbedtls_entropy_init(&entropy);

    mbedtls_ctr_drbg_init(&ctr_drbg);

    if ((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy,
                                     (unsigned char *)pers, strlen(pers))) != 0)
    {
        printf(" failed\n ! mbedtls_ctr_drbg_init returned -0x%04x\n", -ret);
        return 0;
    }

    if ((ret = mbedtls_ctr_drbg_random(&ctr_drbg, key, 32)) != 0)
    {
        printf(" failed\n ! mbedtls_ctr_drbg_random returned -0x%04x\n", -ret);
        return 0;
    }

    // printf() displays the string inside quotation
    printf("Hello, World!");
    return 0;
}

问题原因与修复方法

核心问题

你只链接了mbedtls库,但代码中用到的entropy、ctr_drbg相关函数属于mbedtls的底层加密子库,需要显式链接对应的库文件才能找到这些符号。

修正编译命令

修改编译命令,添加-lmbedcrypto和-lmbedx509两个库(按依赖顺序排列更稳妥):

g++ -fdiagnostics-color=always -g /home/g/projects/aes2/AES_generate.c -o /home/g/projects/aes2/AES_generate -lmbedcrypto -lmbedx509 -lmbedtls

mbedtls库说明

mbedtls分为三个核心库,各司其职:

  • libmbedcrypto:包含加密算法、熵池、随机数生成等底层核心功能,你的代码里用到的函数都属于这个库
  • libmbedx509:处理X.509证书相关逻辑
  • libmbedtls:提供上层TLS协议API

额外代码修正

你的代码里还有一个小语法错误:#if块中的define缺少#,应该改为#define MBEDTLS_PSA_CRYPTO_C,这个错误不会导致链接问题,但建议修正以避免潜在编译警告或逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:46