在 VS 2008 中构建的 QT 应用程序在 XP 中不起作用
Posted
技术标签:
【中文标题】在 VS 2008 中构建的 QT 应用程序在 XP 中不起作用【英文标题】:QT application build in VS 2008 is not working in XP 【发布时间】:2011-07-16 08:15:34 【问题描述】:大家好,我已经使用 QT 插件在 VS 2008 中创建了一个应用程序,它在所有 Windows 系统中都运行良好。 但是,当我尝试在 XP 中运行相同的应用程序时,它显示错误 :: 过程入口点 xxx 无法位于 xxx.dll 中。
我该如何解决这个问题。
【问题讨论】:
【参考方案1】:我认为您需要在 XP 系统上安装 VS 2008 运行时。您可以通过多种方式做到这一点,包括:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en VS 2008 自带的安装程序 (C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\vcredist_x86\vcredist_x86.exe
)
将运行时的 MSM 包合并到 MSI 安装程序中
将 DLL 从 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT
复制到与可执行文件相同的目录中可能会起作用。
更新:
您的程序似乎在解析 msvcrt.dll 中正在寻找的引用时遇到问题 - 一个不直接属于 VS 2008 运行时 (msvcrt90.dll) 的系统 DLL。我在 VS 2008 中使用 Qt 插件测试了一些 Qt 演示,但我没有看到它们直接链接到 msvcrt.dll(正如我所料,程序链接到 msvcr90.dll)。
但是,当我查看使用 Dependency Walker (http://www.dependencywalker.com/) 的程序时,我确实看到 msvcrt.dll
被拉入 - 链接到 advapi32.dll
的结果(在我的 WinXP系统,到msvcrt.dll
的链接是间接的,虽然netapi32.dll
)。我的 WinXP SP3 系统上的msvcrt.dll
副本没有wcscpy_s
的导出,而 Win7 上的那个有。但是在WinXP上使用msvcrt.dll
并没有尝试导入wcscpy_s
,所以没有导出没有问题。
我建议您使用 Dependency Walker (http://www.dependencywalker.com/) 之类的工具来找出是什么试图从 msvcrt.dll
中提取缺少的 wcscpy_s
符号。我认为很有可能你有一个不属于 WinXP 的 DLL,或者应该重建为“与 XP 兼容”。
【讨论】:
是的,我试过了……我用 Qt 插件安装了 VS 并创建了包……并安装在 XP 和 Windows7 中,它工作正常。但是当我在 7 中制作包并在 XP 中运行时,它不是。 ???为什么会这样。 我需要对此进行更多研究 - 看起来 Qt 插件没有使用标准的 VS2008 CRT 链接库(这就是错误引用 msvcrt.dll 而不是 msvcr90.dll 的原因)。如果我认为正在发生的事情(他们正在使用某种 hack 链接到旧版 msvcrt.dll),您可能不得不选择不使用更新的“安全”运行时函数,例如wcscpy_s()
,因为它们是根本不在旧版运行时 DLL 中,或者重新配置构建以链接到 VC9 库。
@Piotr: 'legacy' 我的意思是 msvcrt.dll 不支持使用 VS2005 及更高版本构建的应用程序(可能还有 VS2002/2003,但我对此不是 100% 确定眼下)。请注意您的引文中所说的“它仅供系统级组件将来使用”。
@amrit_neo:看看我在回答中的更新是否有助于解决您的问题。
感谢您的帮助...我尝试使用 Dependency walker 但无法理解它是如何工作的。以上是关于在 VS 2008 中构建的 QT 应用程序在 XP 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何用VS2008为QT控件加代码(最好有具体点的操作步骤)谢谢!
在VS2008中使用Qt时,IntelliSense无法正常工作