解决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-code 中的自动右括号不适用于 js 和 jsx 文件