我是否必须将Qt库与我的软件包一起部署

Do I have to deploy Qt libraries together with my package?

本文关键字:我的 软件包 一起 部署 Qt 是否      更新时间:2023-10-16

我正在开发一个使用Qt的程序,应该在Ubuntu,Debian,CentOS和Fedora上运行。

据我了解,每个枚举的 Linux 发行版都有自己的 Qt 库,也提供了。

但是我正在从事的项目使用定制构建的Qt库来构建和部署。

有那么必要吗?

如果我让它使用系统Qt库,会出现什么陷阱?

有必要

将Qt二进制文件放在可执行文件旁边,因为您的应用程序是针对具有特定工具链的特定版本的Qt编译的。此外,不能保证目标Linux发行版具有使用相同的工具链编译的相同版本的Qt库。

如果未提供所有依赖库,则应用可能无法在某些系统上运行。

您应该将Qt .so文件放在可执行文件的发布版本上。这些是 libQtCore.so 的,libQtGui.so 的,可能是您使用过的其他模块。这些 so 文件位于 lib 文件夹或目录 "/usr/lib/i386-linux-gnu" 中已安装的 Qt 目录中。如果您使用的是插件,则应将其 so 文件放在二进制文件旁边的名为"plugins"的文件夹中。如果使用图标和图像,您应该将它们的文件(如 libqico.so 和 libqsvg.so)寄送到名为"imageformat"的文件夹中。

这个答案主要是为了给你一个起点,或者鼓励你尝试一下。

您应该尽可能针对最低的Qt版本进行构建。Qt承诺在库中向下兼容二进制(假设它们以兼容的方式配置,并且使用兼容的编译器和其他库)。

请注意,您可能还会遇到其他库版本(如 C 标准库)的问题。因此,您不仅应该使用旧的Qt,还应该在旧版本的Linux发行版上构建。

一旦你做了这些,同一个应用程序二进制文件很有可能在不同的 Linux 发行版和同一发行版的不同版本上工作。不过,使用您想要支持的所有发行版进行测试!


尽管如此,在当今虚拟机时代,您应该为每个受支持的发行版设置一个虚拟机并编译自定义包。没有运行 GUI 的服务器版本,只有开发包,应该只需要几千兆磁盘空间(使用动态虚拟磁盘),并且每个正在运行的 VM 需要不到一千兆的"额外"内存即可正常运行。你可以在每个虚拟机上设置类似 Jenkins slave 的东西,或者只是使用 ssh 之类的东西在每个 VM 中运行构建脚本。