Проблемы OpenSSL 1.1.1a OPENSSL_API_COMPAT в GCC 4.4 - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть код C ++, который использует Openssl 1.1.1a. Когда этот код C ++ выполняется в gcc4.4, возникает ошибка связи

undefined reference to `EVP_CIPHER_CTX_init'
undefined reference to `EVP_CIPHER_CTX_cleanup'

Тот же код на C ++ создает файл с windows.

Используется EVP_CIPHER_CTX_init () и EVP_CIPHER_CTX_cleanup () из evp.h из openssl.

В evp.h эти макросы определены ниже.

# if OPENSSL_API_COMPAT < 0x10100000L
#  define EVP_CIPHER_CTX_init(c)      EVP_CIPHER_CTX_reset(c)
#  define EVP_CIPHER_CTX_cleanup(c)   EVP_CIPHER_CTX_reset(c)
# endif

Где-то в opensslconf.h объявлено следующее

#ifndef OPENSSL_MIN_API
# define OPENSSL_MIN_API 0
#endif

#if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < OPENSSL_MIN_API
# undef OPENSSL_API_COMPAT
# define OPENSSL_API_COMPAT OPENSSL_MIN_API
#endif

Таким образом, в идеале OPENSSL_API_COMPAT должен быть инициализирован в 0, что определило бы две функции, которые связаны кодом C ++.

Каким-то образом эти две функции не определены при сборке в gcc4.4.

Я пытался определить OPENSSL_API_COMPAT в 0 при сборке, используя -DOPENSSL_API_COMPAT = 0, но все равно не повезло

В идеале эти функции должны быть определены, когда для макроса OPENSSL_API_COMPAT установлено значение 0. В другом месте этим макросом манипулируют в коде c ++ или другой библиотеке.

Что и где можно изменить макрос? Было бы очень полезно, если бы кто-нибудь из экспертов openssl дал здесь некоторое представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...