2016-11-11 2 views
4

Ich versuche, diese Bibliothek ndn-cxx in meinem Laptop zu kompilieren. Ich probierte bereits in einem anderen Computer und es kompilierte erfolgreich, aber jetzt erhalte ich diesen Fehler und ich denke, dass es somhow zu openssl verwandt ist. Ich verifiziere, dass ich openssl in meinem Laptop unter Verwendung sudo apt-cache search libssl | habe grep SSL und das Ergebnis ist:Fehler: unvollständiger Typ bei Verwendung von HMAC_CTX in C++ Projekt

  • libssl-ocaml - OCaml-Bindungen für OpenSSL (Runtime)
  • libssl-ocaml-dev - OCaml-Bindungen für OpenSSL
  • libssl0.9.8 - SSL shared libraries
  • libsslcommon2 - Enterprise-Messaging-System - gemeinsame SSL-Bibliotheken
  • libsslcommon2-dev - Enterprise-Messaging-System - gemeinsame SSL Entwicklungsdateien

Der Fehler, den ich immer bin, wenn die Bibliothek zu kompilieren versuchen, ist:

../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

Welches Betriebssystem und welche gcc-Version sind auf dem erfolgreichen Computer und dem fehlgeschlagenen Laptop? –

+0

'HMAC_CTX' ist eine öffentliche Datenstruktur. Stellen Sie sicher, dass '#include ' in der problematischen Quelldatei vorhanden ist. Wenn das Include vorhanden ist, müssen wir wissen, wo sich Ihre Kopie von OpenSSL befindet und wie Sie Ihr Projekt konfiguriert haben. OpenSSL 0.9.8 ist wirklich alt und seine Vergangenheit EOL. Aber seine '' enthält 'HMAC_CTX'. Sind Sie auf einem OS X-Computer? – jww

+0

@PaulH. Ich benutze Ubuntu 14.04 in beiden Laptops und gcc Version 4.8 und sie sind beide an der gleichen Stelle/usr/lib/x86_64-Linux-gnu –

Antwort

2

Die file that causes the compilation error enthält die Zeile #if OPENSSL_VERSION_NUMBER < 0x1010000fL und verwendet die Struktur HMAC_CTX in diesem Fall. Bei neueren Versionen von OpenSSL (> 1.1.0) wird HMAX_CTX * verwendet. Meine Schlussfolgerung ist, dass das waf Erstellungswerkzeug die falsche Datei enthält, um die OPENSSL_VERSION_NUMBER zu erhalten und folglich kompiliert, als ob Sie eine ältere Version von OpenSSL mit der Struktur HMAC_CTX verwenden, die als solche in den neueren Versionen nicht mehr verfügbar ist.

Sie könnten grep OPENSSL .waf-tools/openssl.py tun und die gedruckten Zeilen analysieren, um zu sehen, woher die verschiedenen OpenSSL-Includes kommen.

Verwandte Themen