代码之家  ›  专栏  ›  技术社区  ›  Deepak Selvakumar

GCC 4.4中的OpenSSL 1.1.1a链接错误

  •  0
  • Deepak Selvakumar  · 技术社区  · 5 年前

    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专家在这里给出一些见解,将非常有帮助。

    0 回复  |  直到 5 年前