如何打包C ++项目中的所有库和依赖项?

时间:2013-11-07 18:35:39

标签: c++ windows qt qt5

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

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

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

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

所以,我正在考虑做的是基本上得到我的应用程序需要顺利运行的所有.dll文件的树,并将它们全部包含在我的.exe应用程序中。

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

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

2 个答案:

答案 0 :(得分:0)

dependency walker将向您显示传递它们所需的所有DLL

人们通常会使用打包器,您也可以使用它来设置环境变量并摆弄注册表

答案 1 :(得分:0)

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

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

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