Qt 5.4.0 部署问题 - msvcrt.dll 中缺少 vsprintf_s

Qt 5.4.0 deployment issue - missing vsprintf_s in msvcrt.dll

我的 Qt 5.4.0 应用程序遇到部署问题。 经过两天的研究,我的应用程序真的不想在 Windows XP 上执行!

我已经使用 Qt 安装提供的 windeployqt 创建了我的部署文件夹。当我双击 *.exe 时,我总是:

The procedure entry point vsprintf_s could not be located in the dynamic link library msvcrt.dll.

Dependency walker 并没有真正帮助我,我不知道我现在可以尝试什么。

注意:

错误是我在代码中的某处调用了 "sprintf_s"(在我的开发机器上最近的 windows 可以,但 XP 不行)。 如果您在搜索代码时遇到同样的问题,请不要使用错误消息中的函数名称,而是使用 *_s 之类的表达式。 您可能在某处调用了安全 API 函数 !

虽然 Guilhem G. 在广义上是正确的,但这并不意味着您实际上自己调用了该函数(现在与理论上像我一样关注此问题的其他人 运行 交谈,呵呵)。我相信这是 MinGW 的 XP 支持的一个错误;我已经看到 similar 问题的错误报告,包括在后来修复的更早版本的 Qt 中几乎完全相同的问题。我还没有看到这个特殊的化身,我实际上 运行 进入了自己。我想我应该提交错误报告!

无论如何,我已经修复了它而没有更改我自己编写的任何代码。我必须做的修复是双重的:

  1. 切换到使用 msvc2010 编译器,因为这组 C++ 库在 Windows XP 上 运行 相当正常(据我所知,他们仍然没有放弃对最新版本的 XP 支持) .
  2. 切换到 Qt 5.5(我会在最后解释原因)。

对于编译器,您将需要 Microsoft Visual Studio 2010(因此得名),或随附的较旧的 Windows SDK;如果您没有 Visual Studio 2010 许可证,"Microsoft Windows Software Development Kit for Windows Server 2008 and .NET Framework 3.5" 版本应该可以解决问题。

安装其中一个后,我建议您安装由 MSVC2010 编译的 Qt 5.5。您可以启动全新安装程序或使用应该已经安装的 Qt 维护工具。

安装该套件后,在您的项目中(selecting "Projects" 从左侧菜单)您应该可以进入 "Add Kit" 和 select Qt 5.5 msvc2010 32 位,如果您现在重新编译并重新部署您的应用程序,它应该 运行 在 XP 上正常。

现在,为什么我坚持要你升级到 Qt 5.5?好吧,在 Windows 的每个版本上选择可用的 OpenGL 渲染器都存在一些潜在的问题,而 Qt 5.5 通过根据实际检测到的功能返回到 OpenGL 或 ANGLE 以及 IIRC 一些其他功能来简化这一点相关修复。因此,如果您像我一样在多个 Windows 版本中部署 QML / Qt Quick 2.0 应用程序,那么升级到 Qt 5.5 是值得的。