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