我编写了在某些情况下可能加载X509_STORE到 中的代码SSL_CTX,并且由于我不知道是否会发生这种情况,所以我在程序结束时释放了存储区。
我X509_STORE_up_ref在将存储加载到上下文中后调用以避免引用计数错误,因为SSL_CTX_free在存储被加载到给定上下文中时也会释放存储。
但是,我注意到这X509_STORE_up_ref是一个较新的命令,并且我的程序无法在旧系统上编译。在这种情况下,我想用#ifdefOpenSSL 的版本来包装对该函数的调用。
#ifdef?您可以通过查看宏来检查 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)