由于项目的需要,使用了OpenSSL,以前编译的都是windows 32位版本,都没问题。
#include <openssl/ssl.h>
#include <openssl/err.h>
#pragma comment (lib,"libeay32.lib")
#pragma comment (lib,"ssleay32.lib")
要的注意是:将C++的 include 目录和 lib 目录,添加相应的内容。
现在将项目目标类型改成x64后,编译就会报错:
error LNK2019: 无法解析的外部符号 X509_free,
error LNK2019: 无法解析的外部符号 X509_get_issuer_name。
所以,应该是LIB文件不匹配。咱就想着去下载现成的64位库,不过似乎找到半天没有找到。
自己动手去编译一个吧。从 https://www.openssl.org/source/ 下载源码。中间各种波折,花了整整1天加 1个上午的时间。
我想着用一个比较新的版本会好一点,结果测试了 3.1,3.0,1.1.1v,最终还是用的 1.0.2.u
https://www.openssl.org/source/old/1.0.2/
而且也不能用 vs2022去编译,还是得用 vs2010去编译。要不然,高版本编译出来的LIB,可能低版本的工程就会有问题。
编译的过程参考了这篇文章。编译windows32位和64位openssl库_ssleay64.lib_lingguo610的博客-CSDN博客
考虑到编译太辛苦,把编译的结果放在这里供大家下载。
使用代码如下
#include <openssl/ssl.h>
#include <openssl/err.h>
#if defined _M_X64 || defined _AMD64_
#pragma comment (lib,"libeay64.lib")
#pragma comment (lib,"ssleay64.lib")
#else
#pragma comment (lib,"libeay32.lib")
#pragma comment (lib,"ssleay32.lib")
#endif
为了方便大家使用,我也将LIB文件和INCLUDE文件发布到了CSDN的下载频道。