vs2015使用低版本编译的openssl问题

Posted yuandaozhe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vs2015使用低版本编译的openssl问题相关的知识,希望对你有一定的参考价值。

用Vs2005编译的openssl,在vs2015中使用就悲剧了,报如下错误

1>libeay32.lib(cryptlib.obj) : error LNK2019: 无法解析的外部符号 __vsnprintf,该符号在函数 _OPENSSL_showfatal 中被引用
1>libeay32.lib(cryptlib.obj) : error LNK2019: 无法解析的外部符号 _vfprintf,该符号在函数 _OPENSSL_showfatal 中被引用
1>libeay32.lib(cryptlib.obj) : error LNK2019: 无法解析的外部符号 ___iob_func,该符号在函数 _OPENSSL_showfatal 中被引用
1>libeay32.lib(pem_lib.obj) : error LNK2001: 无法解析的外部符号 ___iob_func
1>libeay32.lib(rsa_sign.obj) : error LNK2001: 无法解析的外部符号 ___iob_func
1>libeay32.lib(ui_openssl.obj) : error LNK2001: 无法解析的外部符号 ___iob_func

解决方案如下

#ifdef WIN32
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"Advapi32.lib")
#pragma comment(lib,"Gdi32.lib")
#pragma comment(lib,"legacy_stdio_definitions.lib")
#pragma comment(lib,"libeay32.lib")
#pragma comment(lib,"ssleay32.lib")
#endif
#if _MSC_VER>=1900
#include "stdio.h" 
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus 
extern "C"
#endif 
FILE* __cdecl __iob_func(unsigned i) {
    return __acrt_iob_func(i);
}
#endif /* _MSC_VER>=1900 */

 

以上是关于vs2015使用低版本编译的openssl问题的主要内容,如果未能解决你的问题,请参考以下文章

windows vs2015 编译openssl

vs2015源码编译 openssl1.1.1k

vs2015源码编译 openssl1.1.1k

VS2015编译OpenSSL1.0.2源码

VS2015 发布常见问题

OpenSSL 3.0 版本已经发布VS2019编译源码教程