美文网首页
Windows LINK错误: unresolved exter

Windows LINK错误: unresolved exter

作者: CodingCode | 来源:发表于2023-04-18 08:12 被阅读0次

现象:

: 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))

解决办法:

  1. 针对unresolved external symbol __imp__fprintf
    需要在LINK的时候加上依赖库文件:legacy_stdio_definitions.lib
  2. 针对unresolved external symbol __imp____iob_func
    需要定义自己的__iob_func函数:
FILE _iob[] = {*stdin, *stdout, *stderr};
extern "C" FILE * __cdecl __iob_func(void)
{
    return _iob;
}

相关文章

网友评论

      本文标题:Windows LINK错误: unresolved exter

      本文链接:https://www.haomeiwen.com/subject/mhjhjdtx.html