2016-11-11 625 views
4

我想在我的筆記本電腦中編譯這個庫ndn-cxx 。我已經嘗試過在另一臺電腦上編譯成功,但現在我得到了這個錯誤,我認爲它的相關somhow openssl。我確認我在我的筆記本電腦上安裝了openssl,使用sudo apt-cache search libssl | grep的SSL,其結果是:錯誤:在C++項目中使用HMAC_CTX時不完整的類型

  • 的libssl-ocaml的 - OCaml的綁定OpenSSL的(運行時)
  • 的libssl-ocaml的-dev的 - OCaml的綁定的OpenSSL
  • 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] 
    } 
^
+1

什麼操作系統和gcc版本在成功的電腦和不成功的筆記本電腦上? –

+0

'HMAC_CTX'是一個公共數據結構。確保有問題的源文件中存在'#include '。如果包含內容存在,那麼我們需要知道您的OpenSSL副本的位置以及您如何配置項目。 OpenSSL 0.9.8真的很老,它過去的EOL。但其''包含'HMAC_CTX'。你在OS X機器上嗎? – jww

+0

@PaulH。我在筆記本電腦和gcc版本4.8中都使用了Ubuntu 14.04,它們都位於同一位置/ usr/lib/x86_64-linux-gnu –

回答

2

file that causes the compilation error包含行#if OPENSSL_VERSION_NUMBER < 0x1010000fL並使用結構HMAC_CTX在這種情況下。對於較新版本的OpenSSL(> 1.1.0),它使用HMAX_CTX *。我的結論是,waf構建工具包含錯誤的文件以獲取OPENSSL_VERSION_NUMBER,因此編譯時就好像您使用的是較舊版本的OpenSSL,而結構HMAC_CTX在新版本中不再可用。

你可以做grep OPENSSL .waf-tools/openssl.py並分析打印的行以查看不同的OpenSSL包含的來源。

相關問題