c++ - 具有正确链接库的 undefined reference

标签 c++ reference compilation undefined mbedtls

我在使用 mbedtls 安全库时遇到了一个奇怪的问题。我已经在我的 Ubuntu 机器上下载了它的最新版本 ( link to download the .tar.gz ),然后编译它并将头文件复制到 /usr/include 并将共享库文件复制到 /usr/lib.

当我编译从 mbedtls/cmac.h 调用函数 mbedtls_cipher_cmac_starts 的 C++ 程序时,我收到 undefined reference 错误 Security.cpp:599: undefined reference to 'mbedtls_cipher_cmac_starts '。但是,我已经正确地包含并链接了这些库(至少我是这么认为的,这不是一个排序问题,对吧?)。问题似乎出在 mbedtls 库本身,因为当我 nm -D libmbedcrypto.so 时,我找不到所需的函数。我还检查了 libmbedtls.so 但也没有运气。

0000000000020206 T mbedtls_cipher_auth_decrypt
0000000000020128 T mbedtls_cipher_auth_encrypt
000000000001ff17 T mbedtls_cipher_check_tag
0000000000020022 T mbedtls_cipher_crypt
0000000000264960 D mbedtls_cipher_definitions
000000000001fb49 T mbedtls_cipher_finish

虽然在编译库的时候好像在库makefile里面。此外,奇怪的是头文件 (cmac.h) 可以从代码中引用,但由于 undefined reference 而无法编译。

最佳答案

您在构建时使用了哪个 config.h(查看 configs/ 文件夹)? 确保在构建 mbedtls 时定义了 MBEDTLS_CMAC_C,默认的没有定义它(截至本文发布之日)。

关于c++ - 具有正确链接库的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300768/

相关文章:

c++ - Codeblocks 编译,GCC 不编译

c - 编译背后的主要步骤是什么?

c++ - 关于堆栈增长和寻址的困惑

c++ - 如何创建具有预定义值和分配空间的字符串?

c++ - 有没有办法检查端口号的可用性?

c++ - c++中关于const成员函数的问题

c++ - 处理未初始化的指针数组时出错 C++

c - Linux c 编程引用

C++ : Why reference to stack allocated object treated same as reference to heap allocated object?

c - Visual C++ 无法识别注释行?