【问题标题】:What do people need to run my application?人们需要什么来运行我的应用程序?
【发布时间】:2011-05-21 05:07:53
【问题描述】:

我制作了一个小应用程序并构建了一个发布版本。现在我想把它上传到我的网站。我以前从来没有用 Qt 做过这个,所以我不确定我应该在二进制文件中包含什么。

我如何确定哪些 DLL 应该包含在我的应用程序中?我从哪里得到它们?我正在运行 Windows,但我也想知道如果我想发布 Linux 版本应该怎么做。

【问题讨论】:

  • 对于 linux,只需给他们源代码,让他们编译。
  • @Falmarri:这样的意识形态观点。我相信你很清楚这通常是不可能的。
  • @John:这取决于你从谁的角度来看这是否可取=P
  • 好吧,一些理想主义者说Linux上的所有软件都应该是开放和免费的。但我的观点是,我更愿意挣工资。

标签: c++ qt distribution


【解决方案1】:

对于窗户:

您可以使用dependency walker 来查看您应该发布哪些Qt 库(或其他库)。这是 Visual Studio 中包含的 depends.exe 可执行文件,但您可以从以下位置单独下载:http://www.dependencywalker.com/

将您的应用程序加载到其中,它会列出它在运行时期望的所有模块。您可能还必须提供与构建可执行文件的编译器兼容的 Visual C++ Runtime Redistributable(如果它是 VC++)。

请注意,dependency walker 不考虑 Qt 的插件之类的东西。这方面的一个例子是 QtAssistant 系统(用于帮助菜单类型的功能),从 Qt4 开始,它依赖于 Qt 的 sqlite 功能,该功能通常作为插件构建(qtsqlite4.dll,如果我记得的话)。

对于 Linux:

这比较棘手,因为 Linux 发行版的差异更大。如果您想发布源代码,当然可以使用 GNU 构建系统,但如果您要发布二进制文件,并且想要支持各种发行版,您最好为每个要发布的平台构建软件包。


过去,我工作的一家公司改用cmake,并在设置所有项目和构建文件后,使用它为不同的操作系统生成构建和包。在 Windows 上,这意味着与 Inno Setup 挂钩,对于类 Unix 系统,cmake 知道如何生成诸如可安装的 shell 脚本之类的东西。绝对让生活更轻松


我们的 QA 部门会在我们支持的平台的虚拟机实例中测试我们的软件,彻底清洁,看看是否有任何遗漏。

【讨论】:

  • depends.exe 将获取静态依赖项,但不会获取动态依赖项(显式调用 GetProcAddress)。如果对 MSVCRT 有依赖关系,那么这将变得非常复杂 - 您基本上必须发送可再发行组件。您不能静态链接而不是针对 Qt DLL。让分发变得如此简单。
  • 另外,根据我的经验,正确地解决这个问题(通过阅读库的手册)而不是逆向工程会在你没有测试的平台上失败(或重新分发时不存在)。
  • @David,我同意,您可以静态链接到 Qt 的库,但我认为预构建的 Qt 库没有静态库(只有链接到 DLL 的库)。为了获得真正的静态库,Pieter 可能必须从头开始构建 Qt。由于我用于构建 VC++ 应用程序的设置不同,我从未使用过它们是预构建的。至于发布 Qt 和所有那些依赖库,我的团队肯定有很多工作来清理我们通过使用 cmake“继承”的构建系统。
【解决方案2】:

如果您在谈论 DLL,我认为是关于 Windows。

使用Dependency Walker 查看 DLL 依赖关系。

或者... 使用一个没有安装开发工具的干净系统,然后放置您的可执行文件,尝试在那里运行它,然后查看哪些 DLL 被报告为必要且不存在。将 DLL 放在可执行文件附近。

【讨论】:

    【解决方案3】:

    对于 Linux 版本,您可以为每个 Linux 分支创建面向平台的安装程序版本,也可以让人们从源代码编译。如果您的应用程序是新的,那么您获得曝光的唯一方法就是为人们提供现成的安装程序,即目标安装程序。新用户讨厌从源代码编译包。

    您可以先试用 debian (.deb) 和 redhat (.rpm) 软件包。这两句是非常受欢迎的台词,会让你尝尝鲜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-06
      • 1970-01-01
      • 2015-09-10
      • 2021-06-24
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多