解决OpenSSL加入到在Visual Studio 2019中编译返回LNK2019错误

Posted scruffybear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决OpenSSL加入到在Visual Studio 2019中编译返回LNK2019错误相关的知识,希望对你有一定的参考价值。

文章目录

小结

碰到了OpenSSL加入到在Visual Studio 2019中编译返回LNK2019错误,添加了缺失的库文件,解决了问题。

问题和解决

Error LNK2019

错误有类似以下返回:

Severity	Code	Description	Project	File	Line	Suppression State
Error	LNK2019	unresolved external symbol _BUF_MEM_new referenced in function "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl SimpleWeb::Crypto::Base64::encode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?encode@Base64@Crypto@SimpleWeb@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV45@@Z)
Error	LNK2019	unresolved external symbol BIO_ctrl referenced in function "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl SimpleWeb::Crypto::Base64::encode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?encode@Base64@Crypto@SimpleWeb@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV45@@Z)

在Visual Studio 2019中编译返回LNK2019错误这个问题比较难解决,根据网上经验,尝试了多种解决办法都没有用。
大体有三种解决思路,如下:

  • 函数只声明了没进行定义
    仔细检查了项目的文件,并没有发现没有定义的情况。
  • 编译平台没有选对
    尝试更改了X86和X64的平台,并没有解决问题。
  • 相应的库没有添加到工程中来
    看来看去也看不出具体是哪个库缺失,根据多方查找验证,发现应该是与OpenSSL有关的库。

尝试了在工程属性–> C/C++ --> Code Generation --> Runtime Library进行更改:

  • Multi-threaded (/MT)
  • Multi-threaded Debug (/MTd)
  • Multi-threaded DLL (/MD)
  • Multi-threaded Debug DLL (/MDd)
    以上四个选项进行了切换,发现都不行。

参考:Visual Studio 2019配置OpenSSL 3.0开发环境

工程属性–> Linker --> Input --> Additional Dependencies添加以下库文件:

  • openssl.lib
  • libcrypto.lib
  • libssl.lib
    问题解决。
    我先前安装了Win64OpenSSL-3_0_5.msi,工程文件里都添加了包含目录和库目录,但是还是要在以上设置里添加这三个库。

Error LNK1104

工程属性–> C/C++ --> Code Generation --> Runtime Library进行更改的时候,会报LNK1104的错误。

  • Multi-threaded (/MT)
  • Multi-threaded Debug (/MTd)
  • Multi-threaded DLL (/MD)
  • Multi-threaded Debug DLL (/MDd)

LNK1104 cannot open file 'libboost_date_time-vc142-mt-sgd-x64-1_70.lib',实际在目录里是有libboost_date_time-vc142-mt-gd-x64-1_70.lib,少了个s, 运行库需要的库还不一样,如果拷贝一份,再进行改名,加上个s, 也是能编译的。

Warning C4996

有关C4996警告,已经设置了project properties -> Configuration Properties -> C/C++ -> General -> SDL checks -> No,还是不行。

直接把#pragma warning(disable : 4996)放在代码前面进行了屏蔽。

最后,直接忽略了warning C4267: 'argument': conversion from 'size_t' to 'int', possible loss of data

参考

Visual Studio 2019配置OpenSSL 3.0开发环境
Stack Overflow: LNK1104 cannot open file ‘libboost_log-vc142-mt-gd-x64-1_72.lib’?
VS2012 error C2019, error link2019:无法解析的外部符号
【error LNK2019: unresolved external symbol】问题解决方案
Error LNK2019:Unresolved External Symbol 的解决方案
Unresolved external symbol in object files
Why does Visual Studio 2013 error on C4996?

以上是关于解决OpenSSL加入到在Visual Studio 2019中编译返回LNK2019错误的主要内容,如果未能解决你的问题,请参考以下文章

visual studio除了6还有哪个版本用得多而又不占内存?如何实现多visual studi

尝试在 Visual Studio 2012 中包含 OpenSSL 标头:错误 LNK2019:未解析的外部符号

visual studio 2010问题修复

visual-studio-code 中的自动右括号不适用于 js 和 jsx 文件

CMake Project in Visual Studio 2019

CMake Project in Visual Studio 2019