You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2017 C++项目集成OpenSSL与cpprestapi链接错误如何解决

VS2017工具集升级链接错误解决方法

触发错误

项目升级适配Visual Studio 2017工具集标准时,编译抛出如下链接错误:

  • LNK2001 unresolved external symbol "public: static class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > const web::http::methods::GET" (?GET@methods@http@web@@2V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@B)
  • LNK2019 unresolved external symbol _OPENSSL_add_all_algorithms_noconf referenced in function "public: void __thiscall GatewayManager::EnableGatewayService(void)" (?EnableGatewayService@GatewayManager@@QAEXXZ)

已引入的相关依赖库

已配置的关联lib如下:

  • brotlicommon.lib
  • brotlidec.lib
  • brotlienc.lib
  • cpprest_2_10d.lib
  • cpprest141_2_10d.lib
  • Crypt32.lib
  • Httpapi.lib
  • libcrypto.lib
  • libcurld.lib
  • libeay32.lib
  • libssl.lib
  • mswsock.lib
  • netapi32.lib
  • ntdsapi.lib
  • odbc32.lib
  • odbccp32.lib
  • Rpcrt4.lib
  • secur32.lib
  • shlwapi.lib
  • ssleay32.lib
  • wldap32.lib
  • ws2_32.lib
  • zlibd.lib

修复方案

不需要额外引入新的库,当前错误由重复引入同功能不同版本的冲突库导致,按如下步骤清理即可:

  1. 解决LNK2001错误:VS2017对应的工具集版本为v141,你同时引入了通用版本cpprest_2_10d.lib和v141专用版本cpprest141_2_10d.lib,二者符号定义冲突,删除cpprest_2_10d.lib,仅保留cpprest141_2_10d.lib即可。注意要确保该cpprest库的编译配置和当前项目完全匹配:运行时库选项(MDd/MTd)、目标架构(x86/x64)、字符集(Unicode)均需一致。
  2. 解决LNK2019错误:你同时引入了OpenSSL 1.1.x及以上版本的库libcrypto.lib、libssl.lib,和OpenSSL 1.0.x版本的库libeay32.lib、ssleay32.lib,二者符号完全不兼容。OPENSSL_add_all_algorithms_noconf是1.0.x版本的专属函数,1.1.x之后已移除该API:
    • 如果你沿用旧版OpenSSL 1.0.x,删除libcrypto.lib、libssl.lib,仅保留libeay32.lib、ssleay32.lib即可
    • 如果你要使用新版OpenSSL 1.1.x及以上,删除libeay32.lib、ssleay32.lib,同时将代码中OPENSSL_add_all_algorithms_noconf调用替换为OPENSSL_init_crypto的对应配置逻辑即可。

内容的提问来源于stack exchange,提问作者Alexander Stoimenov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:06:08