未解析的外部符号 __imp__fprintf 和 __imp____iob_func,SDL2

新手上路,请多包涵

有人可以解释一下

__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 许可协议

阅读 997
2 个回答

我终于弄清楚为什么会这样了!

在 Visual Studio 2015 中,stdin、stderr、stdout 定义如下:

 #define stdin  (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))

但以前,它们被定义为:

 #define stdin  (&__iob_func()[0])
#define stdout (&__iob_func()[1])
#define stderr (&__iob_func()[2])

因此,现在 __iob_func 不再定义,这会在使用使用以前版本的 Visual Studio 编译的 .lib 文件时导致链接错误。

要解决这个问题,您可以尝试自己定义 __iob_func() ,它应该返回一个包含 {*stdin,*stdout,*stderr} 的数组。

关于 stdio 函数的其他链接错误(在我的情况下是 sprintf() ),您可以将 _legacy_stdiodefinitions.lib 添加到链接器选项中。

原文由 god 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试将 .lib 链接到我的 vs2015 项目时,我遇到了同样的问题(未解决的外部符号 __impl_printf)

唯一对我有用的解决方案是附加选项框中的项目->属性->链接器->命令行添加:legacy_stdio_definitions.lib

原文由 ali_salha 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题