在函数_OpenSSLDie中引用了未解决的外部符号__imp____iob_func。

17

我在将我的项目从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中出现上述错误。请问我错过了什么?


3
你正在链接使用/MT编译的代码和使用/MD编译的代码,通常这些代码位于库中。这种错误可能会导致非常严重的运行时错误,因此确保所有链接在一起的代码都使用相同的设置进行编译非常重要。请不要使用/MT。 - Hans Passant
所有我的代码都是使用/MD构建的。我仍然收到错误信息。 - user3665224
5个回答

26

将此放置在您的类头文件的开头或者stdafx.h中

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

2
谢谢你的提示,我用这个技巧(并且链接legacy_stdio_definitions.lib)可以使用旧的二进制库进行构建,看起来工作得很好。 - VZ.
2
这个技巧解决了链接错误,但它会产生警告 LNK4217:在构建旧版SDL与VS2017时,在函数中导入本地定义的符号___iob_func。 - AntonK

5

1

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


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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接