我正在使用 Qt 5.0.2 提供的 MinGW-builds 工具链来构建项目。总的来说,事情进展顺利,但我似乎遇到了障碍。当 Beta 测试人员在他的 Windows XP 机器上运行该程序时,该程序立即崩溃并出现以下错误:
我使用Dependency Walker探索了一下,发现了两件事:
当 MinGW 的 C++ 运行时链接到 msvcrt.dll 时,会涉及到它:
令人惊讶的是,他的计算机(以及办公室中的其他几台计算机)的 msvcrt.dll(Windows C 运行时库)版本太旧了,以至于它们缺少所有“安全”CRT 添加(MinGW 的 C++ 运行时显然使用了)。
安装 Qt 提供的 Visual C++ 运行时 (in Qt\Qt5.0.2\vcredist
) 并不能解决问题,因为更新版本的运行时(例如 Qt 使用的那个)提供了不同的文件(例如 VS11 的 msvcp110.dll 和 msvcr110.dll)而不是替换旧的一。
有什么解决方法吗?似乎所有版本的 MinGW 都链接到这个文件,我真的不想切换到 Visual Studio 2010(Qt 5 提供的另一个选项),因为它对 C++11 的支持很差。最初的想法是让安装程序将旧的 msvcrt.dll 替换为新的,但是
许多程序都在积极使用运行时(想象一下),所以它不能被覆盖。
对于一个用户空间应用程序的安装程序来说,进入
C:\Windows\System32
并开始替换文件听起来非常邪恶。