0

我有一个使用 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 中构建时没有定义。

我尝试在使用 -DOPENSSL_API_COMPAT=0 构建时将 OPENSSL_API_COMPAT 定义为 0 但仍然没有运气

理想情况下,应该在宏 OPENSSL_API_COMPAT 设置为 0 时定义这些函数。在 c++ 代码或其他库中没有其他地方可以操作此宏。

宏可以更改什么以及在哪里更改?如果任何openssl专家在这里提供一些见解,将会有很大帮助。

4

0 回答 0