undefined reference to `EVP_CIPHER_CTX_init'
undefined reference to `EVP_CIPHER_CTX_cleanup'
同样的C++代码是用Windows构建文件。
它使用EVP_CIPHER_CTX_init();来自openssl的EVP.h的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
#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
因此理想的OpenSSLIAPIICOMPAT应该初始化为0,这将定义由C++代码链接的两个函数。
在gcc4.4中构建时,这两个功能没有定义。
理想情况下,应在宏OPENSSL_API_COMPAT设置为0时定义这些函数。没有其他地方在C++代码或其他库中操纵这个宏。
宏可以在什么地方更改?如果任何openssl专家在这里给出一些见解,将非常有帮助。