错误:在C ++项目中使用HMAC_CTX时类型不完整

ily*_*mer 5 c++ ssl openssl

我正在尝试 在笔记本电脑中编译该库 ndn-cxx。我已经在另一台计算机上尝试过,并且编译成功,但是现在出现此错误,我认为它与openssl相关。我使用sudo apt-cache search libssl验证笔记本电脑中是否装有openssl | grep SSL,结果为:

  • libssl-ocaml-用于OpenSSL的OCaml绑定(运行时)
  • libssl-ocaml-dev-用于OpenSSL的OCaml绑定
  • libssl0.9.8-SSL共享库
  • libsslcommon2-企业消息传递系统-通用SSL库
  • libsslcommon2-dev-企业消息传递系统-常见的SSL开发文件

我在尝试编译库时遇到的错误是:

../src/security/transform/hmac-filter.cpp:49:12: error: field ‘m_context’ has incomplete type
   HMAC_CTX m_context;
            ^

../src/security/transform/hmac-filter.cpp: In constructor 
‘ndn::security::transform::HmacFilter::Impl::Impl()’:
../src/security/transform/hmac-filter.cpp:35:20: error: ‘m_context’ was not declared in this scope
     HMAC_CTX_init(&m_context);
                    ^

../src/security/transform/hmac-filter.cpp:35:29: error: ‘HMAC_CTX_init’ was not declared in this scope
     HMAC_CTX_init(&m_context);
                             ^

../src/security/transform/hmac-filter.cpp: In destructor ‘ndn::security::transform::HmacFilter::Impl::~Impl()’:
../src/security/transform/hmac-filter.cpp:40:23: error: ‘m_context’ was not declared in this scope
     HMAC_CTX_cleanup(&m_context);
                       ^    

../src/security/transform/hmac-filter.cpp:40:32: error: ‘HMAC_CTX_cleanup’ was not declared in this scope
     HMAC_CTX_cleanup(&m_context);
                                ^

../src/security/transform/hmac-filter.cpp: In member function ‘ndn::security::transform::HmacFilter::Impl::operator HMAC_CTX*()’:
../src/security/transform/hmac-filter.cpp:45:13: error: ‘m_context’ was not declared in this scope
     return &m_context;
             ^

../src/security/transform/hmac-filter.cpp:46:3: warning: control reaches end of non-void function [-Wreturn-type]
   }
   ^
Run Code Online (Sandbox Code Playgroud)

Rei*_*eek 4

导致编译错误的文件包含该行#if OPENSSL_VERSION_NUMBER < 0x1010000fL并在这种情况下使用该结构HMAC_CTX。对于较新版本的 OpenSSL (>1.1.0),它使用HMAX_CTX *. 我的结论是,waf构建工具包含错误的文件来获取OPENSSL_VERSION_NUMBER,因此编译时就像使用旧版本的 OpenSSL 一样,带有 struct HMAC_CTX,而在新版本中该结构不再可用。

您可以grep OPENSSL .waf-tools/openssl.py分析打印的行,以查看不同的 OpenSSL 包含来自何处。