GCC 4.4中的OpenSSL 1.1.1a OPENSSL_API_COMPAT问题

时间:2019-04-12 10:33:13

标签: c++ openssl backwards-compatibility gcc4.4

我有一个使用Openssl 1.1.1a的C ++代码。在gcc4.4中执行此c ++代码时,会出现链接错误

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

同一c ++代码正在使用Windows构建文件。

它使用openssl的evp.h中的EVP_CIPHER_CTX_init()和EVP_CIPHER_CTX_cleanup()。

在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专家在这里提供一些见识,将会很有帮助。

0 个答案:

没有答案