如果要编写可在任何Linux发行版上运行的应用程序,我需要注意什么?


15

我正计划编写一个我希望能够在任何Linux安装上运行的应用程序,而不必在执行时重写任何代码(可能不包括界面,GNOME vs KDE等)。

我对发行版之间差异的细节不是很有经验,而且我也无法提供有关该项目的详细信息,因为它只是进入计划阶段,而不是要深入内核内部进行交互尽可能多地使用计算机的硬件。


开源还是专有的?编译还是解释?
xenoterracide 2010年

开源并编译。

好了,那么您不必担心编写一些小应用程序/ makefile或其他东西,就像oracle一样,它将重新链接您的程序
xenoterracide 2010年

Answers:


10

开发时要记住一些要点,

  1. 使用标准的构建系统
  2. 避免硬编码路径
  3. 使用类似pkg-config查找外部软件包的工具。
  4. 如果您的应用程序具有GUI,请使用一些框架,例如wxWidgets可以根据运行位置呈现本机UI元素的框架。
  5. 避免使用不会在其他发行版上运行的软件包创建依赖关系。

完全确保您的应用程序可在所有发行版上正常工作的唯一方法是在其上实际运行和测试。实现此目的的一种方法是为每个发行版创建虚拟机。VirtualBox可用于执行此操作。我的包装盒上有大约8个虚拟机用于这种测试。

我认为您不能在部署应用程序时一概而论,因为每个发行版都使用不同的软件包安装方式。Debian使用deb和fedora rpm


3
只是要避免使用硬编码路径,ALL发行版之间的最大区别是它们的包管理器以及放置它们的位置。假设他们会将每个文件和目录放在与您不同的位置。
xenoterracide

2

只是我的2c,但我对官方存储库中随附的软件包或从源代码编译的应用程序的使用感到轻松。作为第三方二进制文件分发的应用程序往往会遇到一些依赖性问题。我通常需要跟踪这些问题并手动解决它们。

因此,如果要发布Linux应用程序,则可以将其打包并放入官方存储库。否则,我将以源代码形式分发它,并让用户对其系统进行编译。


2

如果您是针对非嵌入式Linux编写的,则要记住的主要事情是不同的发行版将具有不同的库版本集合。因此,您应该设置足够旧的基线。随着Debian的更新缓慢,Debian稳定版(或稳定存在的版本,在发行后的几个月内)往往是一个合理的选择。

您需要为每个发行版分别打包。如果您的应用程序是开源的并且完全成功,那么您可以指望有人捡起它并提供包装,因此这不是必不可少的技能。除包装外,发行版之间的差异主要影响系统管理,而不影响开发或日常使用。

如果要修补内核,则必须测试更多的发行版,因为每个发行版都有自己的补丁,这些补丁可能会导致不兼容,并且每个发行版都有用户区设置,这些设置可能取决于可用的不同内核接口集(例如要求对于某些东西不是模块)。

请注意,如果您希望您的应用程序在嵌入式系统(此处指的不是服务器,台式机或笔记本电脑)上运行,即使在运行Linux内核的情况下,它们通常也没有通常的库,但是我上面写的内容并不正确,从避开Glibc开始,转而使用µClibcDietlibcBionic等。



0

发行版在打包和应用程序默认设置/配置上主要不同。在确定的体系结构中运行的每个代码都应在该体系结构的每个发行版上运行。同样,您可以轻松地在KDE中运行GNOME应用程序,反之亦然,因此,您可以选择最适合您/您的用户群的应用程序,您就完成了!


0

最主要的是选择一种语言。这将使用哪种语言?如果您真的想在任何Linux发行版上运行,则可以用Python编写。任何将在linux上运行的python应用程序(基本上)将在任何经过​​0修改的linux发行版上运行。

Python还具有非常好的GTK和Qt绑定程序。我从来没有使用过gtk,但是PyQt真的很棒。

python的好处是您可能不需要编译任何扩展(尽管这完全取决于您正在编写的内容。即使您确实需要,也很容易。)并且您还可以通过pypi获得大量的分发源。从那里安装python程序通常比发行版软件包存储库更容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.