【问题标题】:How to Package all the libraries and dependencies in a C++ Project? [duplicate]如何打包 C++ 项目中的所有库和依赖项? [复制]
【发布时间】:2025-11-26 13:35:01
【问题描述】:

我正在为一个项目使用 C++,并使用 Qt 框架来帮助我。但是,我正在处理一些烦人的问题,我希望有人可以在这里帮助我。这是我目前所拥有的”

  • 我使用 Qt 创建了我的 C++ 应用程序
  • 编译我的应用程序并发送最终的 .exe 文件

我还安装了一个单独的非开发操作系统来测试我的应用程序。在测试操作系统上,我只需要安装 Qt 库,我的应用程序就可以正常运行。

但是我的应用程序的一些用户在运行应用程序时遇到了问题。他们中的一些人安装了 Qt,但应用程序仍然找不到所需的 .dll 文件,或者如果他们很好地安装了 Qt,应用程序仍然失败,因为 Qt 本身有一些其他依赖项。或者它们是 64 位的,但我的应用程序是 32 位的……所以它们的 64 位 Qt 库不适用于我的应用程序。

所以,我想做的基本上是获取我的应用程序平稳运行所需的所有 .dll 文件的树,并将所有这些文件包含在我的 .exe 应用程序中。

当然文件大小会增加,但至少我会放心,因为知道应用程序拥有所需的一切。

我正在阅读有关静态/动态链接等的更多信息……但在 C++ 世界中它有点不同。 C++ 中是否有一个类似于 Java 的系统,您可以在其中指定库,并且在编译期间 C++ 会将必要的库复制到最终产品中?

【问题讨论】:

    标签: c++ windows qt qt5


    【解决方案1】:

    dependency walker 将向您显示所有需要的 DLL,您也需要将它们传递出去

    人们通常为此使用打包程序,您还可以使用打包程序设置环境变量并摆弄注册表

    【讨论】:

      【解决方案2】:

      您应该将 Qt DLL 放在可执行文件的发布版本中。这些是 QtCore4.dll、QtGui4.dll(Qt5Core.dll、Qt5Gui.dll、... 用于 Qt5)以及可能用于您使用的其他模块的那些。这些 dll 文件位于您安装的 Qt 目录中的 bin 文件夹中。

      如果您使用的是 MSVS2010,您还应该放置 msvcr100.dll 和 msvcp100.dll。

      如果您使用插件,您应该将它们的 dll 放在您的 exe 旁边名为“plugins”的文件夹中。如果使用图标和图像,您应该在名为“imageformats”的文件夹中发送它们的 dll,例如 qico4.dll 和 qsvg4.dll(Qt5 的 qico.dll 和 qsvg.dll)。

      【讨论】: