在Linux上部署Qt应用程序二进制文件,与LSB兼容

时间:2012-07-05 13:04:17

标签: linux qt

我在Ubuntu 12.04上的Qt Creator中开发了一个小应用程序,我希望它可以运行在任何其他Linux发行版(主要是不同版本的CentOS和ubuntu)上,就像Windows上的任何便携式应用程序一样。

我希望能够简单地共享Application的二进制文件,然后运行该应用程序。 我能够在Windows中成功完成此操作,只需在QT Creator中构建项目,然后将所需的库放在Application目录中,然后将它们传输到其他Windows系统。

我搜索了一遍,发现我应该尝试使用LSB(Linux标准库)兼容性来构建项目,以便它可以在其他Linux发行版上运行。这是正确的方法吗?

我是Qt和Linux的新手(对Shell Scripting不太了解)。 因此,我不知道如何继续使应用程序LSB兼容。

我已提到过以下链接: Distributing Qt-based binaries on LinuxDeploying Qt applications on Linux但是我无法理解我的意思。

我还发现this question here表示与我的情况非常相似,但由于我是新手,我不知道应该怎么做。

此外,考虑到前两篇文章是在6年前编写的,现在不应该有更简单的方法在Linux平台上部署Qt应用程序吗? 我还看到了一些关于静态链接的东西,那是怎么走的? 难道没有办法通过Qt Creator本身完成所有这些工作吗?

如果没有希望为Linux创建一个可移植的Qt应用程序,那么有没有办法,比如一个shell脚本或者某种东西,它将在另一台计算机上编译Qt项目并运行它所需的所有步骤。比如,如果不存在,请下载Qt-SDK,运行qmake和make,然后运行新编译的应用程序(如果尚未存在),以便用户只需运行一个脚本即可运行该程序。

3 个答案:

答案 0 :(得分:2)

使二进制应用程序与任何其他 Linux发行版兼容几乎是不可能的,因为您永远不会事先知道发行版X中可用的库,或者该库的可用版本。即使在单个发行版(例如Ubuntu)中,二进制应用程序几乎从不向后兼容,因为在Ubuntu 12.04上构建的任何内容都依赖于安装在该版本的Ubuntu上的版本库,并且尝试在Ubuntu 10.04上运行该二进制文件将最可能的失败只是因为它没有最新版本的glibc或其他必要的库。

但是,如果您将自己限制在发行版的有限列表和这些发行版的版本中,那么这个想法可以更加实现。然后,您可以知道哪些库可用于这些发行版,并以最低公分母为目标。我曾经维护过一个二进制应用程序,它必须支持几个发行版(Ubuntu,Fedora,OpenSUSE,SLED,Mandriva),我会这样做是安装我在我的构建机器上定位的最老的发行版。这样,二进制应用程序将链接到这些发行版上可用的最旧版本的库。除非有这样一个库的新主要版本(这种情况很少发生,即便如此,发行版通常会出于兼容性原因分发以前的主要版本一段时间),然后您编译的二进制文件将与所有目标发行版兼容。

因此,我会根据您的情况提供快速建议,使用目前仍然支持的最旧的LTS版Ubuntu(目前为10.04)进行开发,你应该漂亮对于最近流行的发行版来说是安全的。对于您已经在Ubuntu 12.04上开发的应用程序,只需在10.04上重新编译相同的源代码就没有问题。理解您永远不会与已编译的C ++ Qt应用程序实现100%兼容。

如果Qt对您来说并不重要,您可以使用更高级别或解释性语言,如Python,Java,Perl或Ruby。使用这些语言,您通常可以依赖已经安装在目标发行版上的语言实现。

答案 1 :(得分:2)

这里的问题不是Linux标准版,而是您需要的Qt特定版本(或更高版本)的存在与否。

与Windows机器完全相同,用户可能安装了任何Qt,或者根本没有安装。在Windows上,检查Qt的某个版本是否比在Linux上更容易,因此编写自动化体验的安装工具会更容易。

要解决您的问题,有几种方法:

  1. 告知用户您的程序需要特定版本的Qt或更高版本,让用户处理问题
  2. 了解如何为要定位的每个发行版创建程序包并创建特定程序包
  3. 使用像0Install或Elf Statifier这样的程序来创建包含所有必要库的包/可执行文件。
  4. 后者类似于许多Windows和Mac程序所做的事情(它们包括安装程序中所需的每个库),但它并不是Linux上的首选方式,而Linux在很大程度上依赖于共享库。

答案 2 :(得分:1)

在Linux中部署应用程序是一场噩梦,幸运的是有一些解决方案。检查这个项目以构建一个捆绑了所有依赖项的可移植二进制文件:

http://statifier.sourceforge.net/statifier/main.html

http://www.magicermine.com/index.html

http://www.pgbovine.net/cde.html

另一个解决方案是制作一个便携式0install包:

http://0install.net/

我推荐这个解决方案。就个人而言,我遇到了3个第一个包装商的问题。