带有正确链接库的未定义引用

时间:2017-07-25 10:34:44

标签: 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 ++程序时,我得到未定义的引用错误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),但由于未定义的引用而无法编译,这很奇怪。

1 个答案:

答案 0 :(得分:2)

您在构建时使用了哪个config.h(查看configs/文件夹)? 确保在构建mbedtl时定义MBEDTLS_CMAC_C,默认值不定义它(截至发布日期)。