我在使用 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/