现象:
: error LNK2019: unresolved external symbol __imp__fprintf referenced in function
: error LNK2019: unresolved external symbol __imp____iob_func referenced in function
原因是什么:
在使用VS2015及以后版本的link时,如果有依赖于使用VS2013编译的目标文件,例如位于.a文件里的.o文件,那就就可能出现这个问题。
因为:
VS2013是这么定义的:
#define stdin (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])
而VS2015是这么定义的:
#define stdin (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))
解决办法:
- 针对
unresolved external symbol __imp__fprintf
需要在LINK的时候加上依赖库文件:legacy_stdio_definitions.lib
。 - 针对
unresolved external symbol __imp____iob_func
需要定义自己的__iob_func
函数:
FILE _iob[] = {*stdin, *stdout, *stderr};
extern "C" FILE * __cdecl __iob_func(void)
{
return _iob;
}
网友评论