使用 ifdef 确定 OpenSSL 版本

Gab*_*beL 6 c openssl

我编写了在某些情况下可能加载X509_STORE到 中的代码SSL_CTX,并且由于我不知道是否会发生这种情况,所以我在程序结束时释放了存储区。

X509_STORE_up_ref在将存储加载到上下文中后调用以避免引用计数错误,因为SSL_CTX_free在存储被加载到给定上下文中时也会释放存储。

但是,我注意到这X509_STORE_up_ref是一个较新的命令,并且我的程序无法在旧系统上编译。在这种情况下,我想用#ifdefOpenSSL 的版本来包装对该函数的调用。

  1. 使用 来检查 OpenSSL 版本的正确方法是什么#ifdef
  2. 我现在的处境是否正确,或者我使用商店的方式是否正确?

dbu*_*ush 8

您可以通过查看宏来检查 OpenSSL 版本号OPENSSL_VERSION_NUMBER。opensslv.h 文件包含有关其值的以下注释:

/*-
 * Numeric release version identifier:
 * MNNFFPPS: major minor fix patch status
 * The status nibble has one of the values 0 for development, 1 to e for betas
 * 1 to 14, and f for release.  The patch level is exactly that.
 * For example:
 * 0.9.3-dev      0x00903000
 * 0.9.3-beta1    0x00903001
 * 0.9.3-beta2-dev 0x00903002
 * 0.9.3-beta2    0x00903002 (same as ...beta2-dev)
 * 0.9.3          0x0090300f
 * 0.9.3a         0x0090301f
 * 0.9.4          0x0090400f
 * 1.2.3z         0x102031af
Run Code Online (Sandbox Code Playgroud)

因此,如果您有某个功能需要 OpenSSL 1.1.0 或更高版本,您可以这样做:

#if OPENSSL_VERSION_NUMBER >= 0x10100000L
// code for version 1.1.0 or greater
#else
// code for 1.0.x or lower
#endif
Run Code Online (Sandbox Code Playgroud)