我遇到了mbedtls安全库的奇怪问题。我已经在我的Ubuntu机器上下载了它的最新版本(link to download the .tar.gz),然后将其编译并将头文件复制到/usr/include
,将共享库文件复制到/usr/lib
。
当我编译从mbedtls / cmac.h调用函数mbedtls_cipher_cmac_starts
的C ++程序时,我得到未定义的引用错误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),但由于未定义的引用而无法编译,这很奇怪。
答案 0 :(得分:2)
您在构建时使用了哪个config.h(查看configs/
文件夹)?
确保在构建mbedtl时定义MBEDTLS_CMAC_C
,默认值不定义它(截至发布日期)。