Qt 构建到没有 dll 的单个 exe 文件

Posted

技术标签:

【中文标题】Qt 构建到没有 dll 的单个 exe 文件【英文标题】:Qt build to a single exe file without dlls 【发布时间】:2013-03-01 08:57:31 【问题描述】:

我在 Widows 7 上使用 Qt 库编写了一个简单的对话框。现在我需要将 .exe 文件发送给我的朋友,以便他可以使用它。但我还需要发送大约 10 个.dll 文件,以便他可以使用它。我已经找到了所有并发送了,但他无法打开它。有一些“Visual C++ 运行时错误”。坦率地说,在我的另一台计算机上,我也无法以同样的错误打开它。我用谷歌搜索了很多,并找到了不同的答案,例如:

    更新 DirectX 安装 Microsoft Visual C++ 2010 Redistributable Package (vcredist_x86.exe)

但这一切对我没有帮助。所以我的问题是:

    为什么它可以在我开发了该对话框的计算机上运行,​​即有什么问题? 我怎样才能摆脱所有 .dll 的东西,购买将其轻松编译成一个 .exe 文件?

【问题讨论】:

你看过这篇文章了吗:qt-project.org/wiki/Build_Standalone_Qt_Application_for_Windows? 或在 Windows 上部署:qt-project.org/doc/qt-4.8/deployment-windows.html 也许也可以做一个安装程序。我喜欢 innosetup:jrsoftware.org/isinfo.php 你不应该问二合一问题。如果您有 2 个问题,请分别发布。 如果他们是非常相关的呢? 【参考方案1】:

1.为什么它可以在我开发该对话框的计算机上运行,​​即有什么问题?

因为您的计算机上安装了 VC Runtime。

有两种方法可以解决这个问题,

a.你需要用 MultiThread(MT) 而不是 MultiThreadDLL(MTD) 编译 QT 和你的 exe。

b.在您朋友的计算机上安装 vc 运行时。

2.我怎样才能摆脱所有 .dll 的东西,购买将其轻松编译成一个 .exe 文件?

您必须将所有 QT dll 构建到库中(白 MT),并将您的 exe 与这些库链接。

这很耗时。你仍然需要windows dll。无论如何,如果您仍想静态链接 Qt,这些链接可能非常有用:

    http://qt-project.org/wiki/How_to_build_a_static_Qt_version_for_Windows_with_gcc http://qt-project.org/doc/qt-4.8/deployment-windows.html

【讨论】:

但我尝试在另一台计算机上安装 VC Runtime(我猜是 vcredist_x86.exe),但没有帮助。为什么? 确保为编译器安装正确的运行时。 x64 和 32 位有不同的运行时,每个编译器版本甚至服务包都有不同的运行时。最重要的是,确保您使用与构建应用程序完全相同的编译器构建 Qt。 如果所有这些都满足,我会运行depends.exe来尝试确定缺少什么。【参考方案2】:

此链接可帮助我找到解决方案。 https://bugreports.qt-project.org/browse/QTBUG-28766

我复制了“C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin”目录中的所有dll,但在添加“platforms/qminimal.dll”和“platforms/qwindows.dll”后全部解决到我的 .exe 程序。

【讨论】:

以上是关于Qt 构建到没有 dll 的单个 exe 文件的主要内容,如果未能解决你的问题,请参考以下文章

C++、Qt - 如何摆脱 dll 依赖项?

如何用Qt自动拷贝exe依赖的dll

在windows下安装了QT creator 编译出来的.exe文件 双击无法执行,提示找不到:没有找到qt5cored.dll

QT程序打包

Qt 应用程序发布 exe 未运行

vs2015+opencv+qt打包exe的问题