有人可以解释一下
__imp__fprintf
和
__imp____iob_func
未解决的外部手段?
因为我在尝试编译时遇到了这些错误:
1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp__fprintf referenced in function _ShowError
1>SDL2main.lib(SDL_windows_main.obj) : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _ShowError
1>E:\Documents\Visual Studio 2015\Projects\SDL2_Test\Debug\SDL2_Test.exe : fatal error LNK1120: 2 unresolved externals
我已经可以说问题不在于链接错误。我已将所有内容正确链接,但由于某种原因它无法编译。
我正在尝试使用 SDL2。
我使用 Visual Studio 2015 作为编译器。
我已在 Linker -> Input -> Additional Dependencies 中链接到 SDL2.lib 和 SDL2main.lib,并且我已确保 VC++ 目录正确。
原文由 RockFrenzy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我终于弄清楚为什么会这样了!
在 Visual Studio 2015 中,stdin、stderr、stdout 定义如下:
但以前,它们被定义为:
因此,现在 __iob_func 不再定义,这会在使用使用以前版本的 Visual Studio 编译的 .lib 文件时导致链接错误。
要解决这个问题,您可以尝试自己定义
__iob_func()
,它应该返回一个包含{*stdin,*stdout,*stderr}
的数组。关于 stdio 函数的其他链接错误(在我的情况下是
sprintf()
),您可以将 _legacy_stdiodefinitions.lib 添加到链接器选项中。