我被困在我的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.
依赖行走器并没有真正帮助我,我不知道我现在可以尝试什么。
注意:
- SDK: Qt 5.4.0 (MSVC 2010, 32位) IDE: QT Creator 3.3.0
- 编译器:MinGW 4.9.1 32 Bits
- 需要运行在:Windows XP Pro SP2 32位
- 应用程序在具有相同配置(IDE,编译器等)的Windows 7上像魅力一样工作
虽然Guilhem G.在更广泛的意义上是正确的,但这并不意味着您实际上自己调用了该函数(现在与像我这样遇到这个问题的理论上的其他人交谈,嘿)。我相信这是MinGW对XP支持的一个bug;我看到过关于类似问题的bug报告,包括几乎完全相同的问题,在一个更早的Qt版本中,后来被修复了。我还没见过这个特别的化身,我自己也碰到过。我想我应该提交一个bug报告!
无论如何,我已经修复了它,没有改变任何我自己写的代码。为了解决这个问题,我需要做两件事:
- 切换到使用msvc2010编译器,因为这组c++库在Windows XP上运行得很好,这并不奇怪(据我所知,他们仍然没有在最新版本中放弃XP支持)。 切换到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维护工具。
一旦工具包被安装,在你的项目中(从左侧菜单中选择"项目"),你应该能够去"添加工具包",选择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是值得的。
这个错误是我在代码的某个地方称为"sprintf_s"(对于我的开发机器上的最新windows是ok的,但对于XP则不是)。如果在代码中搜索时遇到同样的问题,不要完全使用错误消息中的函数名称,而是使用像*_s这样的表达式。您可能会在某处调用安全API函数!