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

时间:2015-05-26 05:19:56

标签: 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

该项目在VS2008中构建,但VS2015中存在以上错误。我可以知道我错过了什么。

5 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:5)

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

更改openssl根目录中文件e_os.h的第310行 .absoluteFill { /*your styles*/ margin:0; width:calc(100% - 30px); }
# if _MSC_VER> =1300
解决了这个问题。

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

  

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

Visual Studio 2015被称为_MSC_VER == 1900。

答案 2 :(得分:1)

确保您的libcurl.lib是使用与您的应用程序相同的IDE(MSVC 2015)编译的。

答案 3 :(得分:0)

您的openSSL版本已过时VS2015。从https://www.openssl.org/source/

下载并安装最新的稳定版本

修改:如何安装:https://www.youtube.com/watch?v=icNn-eJif9k

答案 4 :(得分:0)

通常来说,在解决方案资源管理器中单击项目,然后转到->属性-> C / C ++->代码生成->运行时库。使库和二进制文件都具有相同的选项。