我使用QT5.0.1写的程序在自己有安装QT的电脑上能正常运行,但在没安装QT的电脑上会出错,我把BIN

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我使用QT5.0.1写的程序在自己有安装QT的电脑上能正常运行,但在没安装QT的电脑上会出错,我把BIN相关的知识,希望对你有一定的参考价值。

里面所有库的DLL都放过去也不行,同样一包资料,放到安装过QT的电脑上就运行正常,请问哪位大神有遇过,可以告诉我还缺少什么文件吗?

缺少这个libEGL.dll,拷到程序目录,问题解决,我也遇到相同问题,就这样解决了,此外,还要在部署目录里建立platforms目录,并在platforms放入qminimal.dll和qwindows.dll两个文件,程序才能运行。 参考技术A 哥们,我也遇到和你一样的问题,下载了Qt5.0.1版本,编译生成的EXE文件在别人的机子上跑,出现和你一样的问题。纠结了好几天都搞不定,应该不是缺少某个文件那么简单,我把编译好的exe程序放到bin目录下,连同bin目录一起拷到别人电脑也不行。我也不打算用静态编译,小小的程序如果弄个几百兆出来吓人,我查看了Denpend Walkey工具依赖库,里面也没什么特别提示缺少的,该拷的DLL文件也都拷到执行目录下,可是放在别人电脑上就是出现Runtime Rrror!。百度上知道的也基本上围绕着动态库没拷或者什么的,根本解决不了问题啊!我看过有人说可以运行的例子是用QT+VS2008编译,生成的程序可以在别人的机子上跑,只是环境不好搭建。我现在还束手无措,有解决方案互相告知啊!【本人已解决该问题了,在VS上装个QT开发的exe就不会有这个问题了。】 参考技术B 因为你链接的是qt的动态库,在没有qt动态库的系统上肯定是运行不了的。
有两种方法,一种是静态编译,但会让运行文件变大。
第二种就是把动态库和程序一起打包出去,路径设置好就可以,但会让安装包变大,自己权衡咯。
我推荐静态编译,因为一般的系统上都没有qt链接库。追问

我不打算用静态编译,这样下来EXE太大了,所以我才想用动态方式,我在已经安装过的电脑上是可以运行的,只不过一定要把动态库文件放到执行文件的相同路径下,但是在没有安装QT的电脑上就会出错,我估计是运行时还要调用其它的东西,可能是安装时产生到system32下的文件,我没办法试这么多文件,所以请各位知道的大神帮忙指点指点具体还要一些什么库?

追答

就是要依赖你的qt的DLL文件啊
你看一下以构建时链接了哪些lib
就把对应的DLL文件打包一起发布就行了

参考技术C 嗯,Qt还有plugin文件夹,该文件夹在你的Qt安装目录下,此时需要复制plugin里面的platform文件夹,如果程序用了图片的话可能还需要plugin里面的图片相关文件夹(具体名字忘了)声音也一样。 参考技术D 这很明显的不是QT库的问题啊,是微软C++运行库的问题,编译环境的差异造成的吧,有些系统不会出一些问题,另一些会有,通常都是你自己的程序内部存在内存泄露了、访问越界了什么的问题。追问

我只是建了一个新工程而已,还没写任何进去,应该不会有内存泄露的。我猜应该是还要在运行程序中加入一些文件,只是还不确定是哪些。

追答

不是的,肯定是你的库版本或者编译版本的问题,如果缺少文件,windows会提示无法定位或者无法装入或者是丢失某某文件的警告,而现在的警告是异常结束,肯定是出现内部中断造成运行库终止的问题。你确定你拷贝过来的库能在此系统环境下正常运行?

在另一台电脑上运行 qt qml 应用程序

【中文标题】在另一台电脑上运行 qt qml 应用程序【英文标题】:Run qt qml app on another pc 【发布时间】:2017-01-23 09:03:51 【问题描述】:

我在 Qt 5.7.1 中使用 Qml Quick 2.6 编写了一些应用程序。 它不能在没有安装 Qt 的另一台电脑上运行。 在日志中我看到这个错误: “[警告] QQmlComponent:组件未准备好”。 在 Windows 的任务管理器中,我看到应用程序正在运行,但没有应用程序窗口。 我放入资源文件中的所有 qml 文件。

new QQmlComponent(&(this->engine),
                                  QUrl(QStringLiteral("qrc:/qml/design/qml/main.qml")));

具有应用外观的目录:

当我在另一台 PC 上启动应用程序时,没有任何关于依赖某些 dll 的错误消息。请帮忙...

【问题讨论】:

不需要部署整个qml目录吗? 我需要运行应用程序,我存储在资源文件中的所有 qml 文件。但是当我在另一台电脑上运行应用程序时,应用程序似乎无法归档 qml 文件。当我在我的 pc 应用程序的 workink 上运行时。我不知道怎么了... 我说的是Qt的qml目录。您似乎只是从中复制了QtQuick.2... 使用windeployqt 和qml 标志,很像this。您需要确保部署工具为您识别所需的快速 dll/qml 文件并导入它们。 【参考方案1】:

将正确(且最少)的 DLL 二进制文件集复制到目标机器并不是最简单的事情。但是有它的标准文档和一个名为 windeployqt 的帮助工具,您应该查看。

http://doc.qt.io/qt-5/windows-deployment.html

【讨论】:

我也一样...window od 应用程序不显示,在任务管理器中我可以看到该过程。 部署工具也不适合我。这就是为什么我对分发给其他人的应用程序使用静态链接的原因,它只是省去了很多麻烦。 @ddriver 较新版本似乎工作正常,当然你也可以在 Windows 上像 this 一样使用它们。 2 我用过 Mac 和 Win,没有特别的问题。但是,是的,静态链接肯定是最简单(也是最小)的解决方案。 我刚刚安装了5.8,所以我会试一试。 @ddriver 如果你用mingw编译你需要手动复制libgcc、pthread和stdc。不知道为什么他们没有被复制。自一年以来(实际上在 Mac 上为 2 年),它一直对我有用。

以上是关于我使用QT5.0.1写的程序在自己有安装QT的电脑上能正常运行,但在没安装QT的电脑上会出错,我把BIN的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.0.1 中的“配置”无法识别

4-QT的程序打包发布(将QT5的工程项目打包成一个exe程序)

Qt:在 Windows、Visual Studio 2010 (VS2010) 上编译 Qt 5.0.1 时出错

错误MSB6006:“cmd.exe”退出,运行QT应用程序的代码1

Qt vs2017程序打包发布(图文详细步骤)

在 QtCreator 中从 Qt 调用 fortran 代码