我正在开发一个使用Qt的程序,应该在Ubuntu,Debian,CentOS和Fedora上运行。
据我所知,每个枚举的Linux发行版都有它自己的Qt库,也提供。
但我正在开发的项目使用自定义构建的Qt库来构建和部署。
是否有必要?
如果我使用系统Qt库会出现什么陷阱?
答案 0 :(得分:1)
有必要将Qt二进制文件放在可执行文件旁边,因为您的应用程序是针对具有特定工具链的特定版本的Qt编译的。此外,无法保证目标Linux发行版具有使用相同工具链编译的相同版本的Qt库。
如果您没有发送所有依赖库,那么您的应用可能无法在某些系统上运行。
您应该将Qt .so文件放在可执行文件的发行版本中。这些是libQtCore.so,libQtGui.so,也可能是您使用过的其他模块的libQtCore.so。这些文件位于lib文件夹或目录" / usr / lib / i386-linux-gnu"中已安装的Qt目录中。如果您使用插件,则应将其so文件放在名为" plugins"的文件夹中。在二进制文件旁边如果使用图标和图像,您应将其文件(如libqico.so和libqsvg.so)发送到名为" imageformats"的文件夹中。
答案 1 :(得分:1)
这个答案主要是为了给你一个起点,或鼓励你尝试一下。
您应该针对最低的Qt版本进行构建。 Qt承诺在库中降低二进制兼容性(假设它们以兼容的方式配置,并且使用兼容的编译器和其他库)。
请注意,您可能还会遇到其他库版本的问题,例如C标准库。因此,您不仅应该使用旧的Qt,还应该使用旧版本的Linux发行版。
执行这些操作后,相同的应用程序二进制文件很有可能处理不同的Linux发行版,以及相同发行版的不同版本。仍然,测试你想要支持的所有发行版!
但是,在虚拟机的这个时代,您应该为每个支持的发行版设置一个虚拟机并编译自定义程序包。没有GUI运行的服务器版本,只是开发包,应该只需要几个磁盘空间(带有动态虚拟磁盘),并且每个运行的VM需要少于一个“额外”内存以便运行良好。您可以在每个虚拟机上设置类似Jenkins slave的东西,或者只使用ssh之类的东西在每个虚拟机中运行构建脚本。