2016-11-11 2 views
4

Я пытаюсь скомпилировать эту библиотеку ndn-cxx в моем ноутбуке. Я уже пробовал на другом компьютере, и он скомпилирован успешно, но теперь я получаю эту ошибку, и я думаю, что это связано с тем, чтобы открыть openssl. Я проверяю, что у меня есть openssl в моем ноутбуке, используя sudo apt-cache search libssl | Grep SSL и результат:Ошибка: неполный тип при использовании HMAC_CTX в проекте C++

  • 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 ' присутствует в проблемном исходном файле. Если присутствует include, нам нужно знать, где находится ваша копия OpenSSL, и как вы настроили свой проект. OpenSSL 0.9.8 действительно старый и его прошлый EOL. Но его '' включает 'HMAC_CTX'. Вы на машине OS X? – jww

+0

@PaulH. Я использую ubuntu 14.04 как в ноутбуках, так и в gcc версии 4.8, и они оба находятся в одном месте/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.