【问题标题】:Should Qt builds run on other computers?Qt 构建是否应该在其他计算机上运行?
【发布时间】:2020-10-20 05:38:24
【问题描述】:

我在 Debian 10 32 位上制作了一个基于 Qt 5.12 的桌面应用程序。因为 Qt 5.12 不能通过 apt-get 获得(我需要 5.12 引入的 2D 图表功能),所以我从源代码编译了 Qt。

该应用程序应该在另一台计算机上运行,​​同样是 Debian 10 32 位。所以我从开发机器上复制了所需的 Qt 依赖项。它工作正常。

这种方法可以吗?还是应该在每台计算机上编译 Qt,因为硬件规格不一样?

【问题讨论】:

  • 一旦您想将软件部署给最终用户等,这将不起作用。通常会为 Windows/macOS 提供自包含的安装程序/.dmgs,并为各种发行版提供特定于发行版的软件包(参见例如 OpenSUSE 构建服务),或者使用自包含的包(参见 appimage.org)。
  • 我将 Qt 依赖项复制到另一台计算机,应用程序似乎在那里运行良好。什么不应该工作?是否必须在每台机器上编译 Qt?我会相信这一点,尽管到目前为止我还没有论据来证明这一点。
  • 一个可能的问题是与其他库不兼容,例如 libstdc++ 和 libc。创建分发包时,通常会使用分发提供的 Qt。我猜 AppImage 在这里引起的头痛最少。但这始终取决于您要分发给谁的软件类型。它是开源软件还是专有软件?您实际需要支持多少个目标平台?你控制目标计算机吗?等

标签: c++ linux qt


【解决方案1】:

Qt 和其他共享库一样,不需要在每台计算机上编译。可以在一台机器上编译,然后部署到其他机器上;这就是 Debian 等发行版所做的。

不过,话虽如此,如果您要将应用程序部署到多台机器上,您需要进行更多的打包,而不仅仅是复制库。通常,用户将软件构建到操作系统包中(因此对于 Debian 是 .deb 文件)并以这种方式分发。您还需要验证这些库是否以通用方式构建(例如,没有-march=native),否则您的程序将在与您编译它的机器具有不同硬件的系统上崩溃或性能不佳。

除非您绝对需要 Qt 5.12 并且不能没有这个新版本中的功能,否则您可能会发现使用 Debian 10 中的 Qt 5.11 软件包已经大大简化了您的生活。您通常会发现您的用户也会喜欢不必安装完全不同的 Qt 版本,并且您会喜欢不必为您通常不维护的库处理安全更新。如果您不打算主动监控 Qt 的安全更新并将它们应用于您发布的版本,那么发布您自己的版本对您的用户不利,您应该改用发行版。

【讨论】:

  • 我把所有东西都放在一个 zip、应用程序 + Qt 依赖项和一个 install.sh 上。所以我希望不要对部署有太多抱怨。这比创建.deb 容易得多,对吧?如果用户决定在非 Debian Linux 上运行它,它可能仍然可以工作,对吧?
  • 一般来说,尝试跨发行版进行单一构建将是一个问题。 Qt 通常链接到 OpenSSL,并且在不同的发行版中有很大的不同。另外,如果你不打包,大多数人不会安装你的应用;它表明您对与系统其余部分的正确集成不够关心,并且它会阻止包管理器确保您的代码继续工作。
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2012-04-07
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多