C++ 可执行文件仅从 Visual Studio 启动
Posted
技术标签:
【中文标题】C++ 可执行文件仅从 Visual Studio 启动【英文标题】:C++ executable only starts from Visual Studio 【发布时间】:2015-05-16 09:27:54 【问题描述】:我有一个用 C++ 编写的程序,它是用 Visual Studio 2013 编译的。它也使用 Qt5。我可以从 Visual Studio(调试/发布)启动程序,但如果我尝试在 VS 之外启动 .exe 文件,则不会发生任何事情。我的假设是它缺少 DLL 文件。根据“dumpbin /dependents”,我需要这些 DLL:
文件类型:可执行图像
图片有以下依赖:
Qt5OpenGL.dll Qt5Gui.dll Qt5Widgets.dll Qt5Core.dll MSVCP120.dll MSVCR120.dll KERNEL32.dll SHELL32.dll
我有那些与 .exe 文件位于同一目录中的文件。我从“C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\x86\Microsoft.VC120.CRT”复制了 msvcp120.dll 和 msvcr120.dll,从“C:\Qt\5.4\”复制了 Qt5 DLL msvc2013\bin"。
我做错了什么?我是 C++ 新手,所以我可能在这里缺少一些知识。
【问题讨论】:
两个提示:首先,在可执行文件上使用“dependencywalker”。其次,打开一个命令行,CD 到该目录并从那里运行它。这至少应该会给你一些错误消息,除非程序启动并立即终止,这也是可能的。 进入任务管理器查看进程是否运行? 它不在任务管理器中。并且从.exe文件夹中的命令行运行它没有任何效果,它立即回到命令行。 @Torben 您在 Visual Studio 中有任何“调试”参数吗?右键单击项目->属性->配置属性->调试并检查“命令参数” 不,参数是空的。 “Dependency Walker”显示了相同的 DLL。它显示了一些错误,但因为 Qt5Widgets.dll 似乎依赖于一些我什至在我的系统上没有的 DLL。但它适用于 VS2013... 【参考方案1】:我的 .exe 缺少 3 个 DLL:icudt53.dll、icuin53.dll、icuuc53.dll。 “Dependency Walker”实际上将它们显示为缺失,但我误解了它的含义并认为它们根本不在我的系统上。但是它们可以在 $(QTDIR)\bin 中找到,并且我的 VS 项目将该路径添加到 PATH 变量中,因此在 VS 中,DLL 并没有丢失。
编辑:从命令行执行此操作实际上要容易得多:
windeployqt C:\Path\To\My.exe
它将所有需要的 DLL 复制到 .exe 文件夹中。 DLL 比我想象的还要多。例如,如果您想在没有 Qt 的机器上部署程序,则需要“qwindows.dll”。
【讨论】:
以上是关于C++ 可执行文件仅从 Visual Studio 启动的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中调试由可执行文件调用的 C++ 文件
如何找到 Visual Studio 正在调用的确切编译器可执行文件?