![](/img/trans.png)
[英]This application has requested the runtime to terminate it in an unusual way QT C++
[英]Cannot run my exe file on another computer. “Application requested the runtime to terminate it in an unusual way” error
我的exe在我编程的计算机上运行完全正常。 它调试很好,发布很好,我可以将exe文件从'release'文件夹移动到一个新文件中,从C:\\ pathtoqt \\ ming47_32 \\ bin找到所需的.dll文件,它仍然运行正常。 但是,当我尝试在包含.dll文件的另一台计算机上运行此程序时,我无法执行此操作并且我得到“应用程序已请求运行时以不寻常的方式终止它”。
我在2台Windows 7计算机和1台Windows XP上测试了这个。 我使用了依赖walker并下载了一堆.dll,它仍然没有用。 我设法让所有的dll成为“找到”状态或“红色”状态。
构建设置: http : //puu.sh/3qTV3.png
我使用的是Qt5.0.2,mingGW 4.7 32bit。
我也偶然发现了这个... http://puu.sh/3qU6j.png
这些计算机很可能没有您的程序正在使用的一些必需的Qt库。 请参阅此处的教程: http : //doc.qt.io/qt-5/windows-deployment.html
另一个简单的检查是在另一台计算机上安装Qt,移动.exe并查看它是否运行。 如果是这样,您肯定没有正确部署您的应用程序。
编辑添加这个有用的链接,因为这似乎是人们看到的完全相同的问题: https : //bugreports.qt.io/browse/QTBUG-28766
如果安装了cygwin,则可以运行ldd <your_app.exe>
并查看应用程序所需的库列表。 执行此操作后,将您的exe复制到另一个文件夹和库所需的库。
对于LGPL许可证应该没问题,但我不是律师,所以请咨询一些熟悉法律问题的聪明人。
您正在部署mingw编译的应用程序,除了应用程序中使用的Qt-DLL之外,还需要提供以下DLL文件:
icudt51.dll
icuin51.dll
icuuc51.dll
libstdc++-6.dll (eventually)
platforms/qminimal.dll
platforms/qwindows.dll
libgcc_s_dw2-1.dll (eventually)
这些可以在SDK安装中找到的mingw目录中找到。
支持的DLL适合编译器版本也很重要。
这是Qt中的一个错误。
这是因为缺少DLL,但它是一个插件DLL,所以它不会出现在depends.exe中,而Qt不会在它应该的地方查找它。
简而言之,如果你将qwindows.dll(或用于调试版本的qwindowsd.dll)复制到你的部署机器上并放入相同的SAME ABSOLUTE PATH,即c:\\ Qt \\ _5.1.0 ..... 。\\ mingw48_32 \\ plugins \\ platforms \\ qwindows.dll,那么你的应用应该可行。 同一目录中存在空白的qt.conf文件不会影响我的开发计算机上的内容,但它确实阻止了应用程序在我的部署计算机上运行。
有关详细信息,请参阅此评论/错误报告: https : //bugreports.qt.io/browse/QTBUG-28766?focusCommentId = 217317&page = com.atlassian.jira.plugin.system.issuetabpanels :comment-tabpanel#comment-216317
这是Windows上的一个错误:
https://bugreports.qt-project.org/browse/QTBUG-28766
具体来说,Qt只查找qwindows.dll(这是必需的,尽管depends.exe
说它 - 它是动态加载的)在它安装在您的开发机器上的硬编码绝对路径中,即c:\\Qt\\.....\\plugins\\platforms
。 有一个名为qt.conf的文件,您应该可以使用它来更改搜索路径,但它不起作用。
幸运的是,Joost Bloemen在该bug报告中提出了一个解决方法:
...
#include <windows.h>
#include <QFileInfo>
int main(int argc, char* argv[])
{
// Bug workaround. See https://bugreports.qt-project.org/browse/QTBUG-28766
wchar_t dirpath[MAX_PATH];
GetModuleFileName(0, dirpath, MAX_PATH);
QFileInfo dir(QString::fromWCharArray(dirpath));
QApplication::addLibraryPath(dir.absolutePath());
QApplication a(argc, argv);
...
然后将qwindows.dll
( 您不需要qminimal.dll
)放在EXE称为platforms
的子目录中。 (你可以把它放在.\\plugins\\platforms
如果你愿意,那么你只需要将dir.absolutePath()
更改为dir.absolutePath() + "/plugins"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.