函数_OpenSSLDie中引用了未解析的外部符号__imp____iob_func

use*_*224 16 visual-studio visual-studio-2015

将项目从VS2008迁移到VS2015时,我遇到了以下错误.

21>TFCLd.lib(cryptlib.obj) : warning LNK4217: locally defined symbol _fprintf imported in function _OpenSSLDie
21>TFCLd.lib(rsa_sign.obj) : warning LNK4049: locally defined symbol _fprintf imported
21>TFCLd.lib(cryptlib.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _OpenSSLDie
21>TFCLd.lib(rsa_sign.obj) : error LNK2001: unresolved external symbol __imp____iob_func
Run Code Online (Sandbox Code Playgroud)

该项目建立在VS2008中,但在VS2015中出现上述错误.我可以知道我错过了什么.

小智 22

将它放在类头文件的开头或stdafx.h中

FILE _iob[] = { *stdin, *stdout, *stderr }; 
extern "C" FILE * __cdecl __iob_func(void) { return _iob; }
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的提示,我可以使用这个技巧使用旧的二进制库构建(并且还与`legacy_stdio_definitions.lib`链接,它似乎工作正常。 (2认同)
  • 此技巧解决了链接错误,尽管它会产生警告LNK4217:在函数中导入了本地定义的符号____iob_func ...(使用VS2017构建旧的SDL时) (2认同)

pit*_*ker 5

请看:http:
//openssl.6102.n7.nabble.com/Compiling-OpenSSl-Project-with-Visual-Studio-2015-td59416.html

更改openssl根目录中的文件e_os.h的第310行
# if _MSC_VER> =1300

# if _MSC_VER> =1300 && _MSC_VER <= 1800
修复问题.

原始海报描述了问题的原因:

在Visual Studio 2015中,重新设计了具有旧名称的库

Visual Studio 2015称为_MSC_VER == 1900.