У меня есть код 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 дал здесь некоторое представление.