MENU

VS2019编译libhv

May 8, 2022 • Windows

1. 启用 openssl 时编译问题:

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertOpenStore,该符号在函数 capi_open_store 中被引用

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertCloseStore,该符号在函数 capi_find_key 中被引用

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertEnumCertificatesInStore,该符号在函数 capi_find_cert 中被引用

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertFindCertificateInStore,该符号在函数 capi_find_cert 中被引用

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertDuplicateCertificateContext,该符号在函数 capi_load_ssl_client_cert 中被引用

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertFreeCertificateContext,该符号在函数 capi_dsa_free 中被引用

1>libcrypto.lib(e_capi.obj) : error LNK2019: 无法解析的外部符号 __imp_CertGetCertificateContextProperty,该符号在函数 capi_cert_get_fname 中被引用

原因

OpenSSL库使用了windows的一个密码学库: Crypt32

解决方案

在 项目属性 - 链接器 - 输入 - 附加依赖项 中加入: Crypt32.lib 即可

2. 引用 hv.h 头文件与microsoft的网络库冲突问题

原因

Windows.h和winsock2.h 对sockaddr这些结构体有重复定义、

解决

#include <windows.h> 前面定义一个宏:

#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>