在 Visual Studio 2015 中编译 SDL2 项目时,开发人员可能会遇到未解析的外部符号 __imp__fprintf 和__imp____iob_func.
根本问题源于 Visual Studio 2015 对 stdin、stderr 和 stdout 的定义与以前的版本不同。在旧版 Visual Studio 中,这些被定义为指向包含三个标准 IO 流的数组的宏。但是,在 Visual Studio 2015 中,它们是使用 __acrt_iob_func() 定义的。
因此,使用以前的 Visual Studio 版本编译的依赖于 stdin、stderr 和 stdout 的旧定义的代码将遇到未定义的引用链接到使用 Visual Studio 2015 编译的库 (.lib) 时到 __iob_func()。
到解决这个问题,一种解决方案是手动将 __iob_func() 定义为包含 {stdin, stdout, *stderr} 的数组。这确保代码具有对 __iob_func() 的必要引用。
此外,任何使用 stdio 函数(例如 scanf、printf)的代码也可能会遇到无法解析的外部符号。为了解决这个问题,开发人员可以将legacy_stdio_definitions.lib 添加到他们的链接器选项中。该库提供了缺少的 stdio 函数的定义。
以上是为什么我的 SDL2 Visual Studio 2015 项目中出现未解析的外部符号 __imp__fprintf 和 __imp____iob_func?的详细内容。更多信息请关注PHP中文网其他相关文章!