我正计划编写一个应用程序,我希望能够在任何 Linux 安装上运行,而无需重写任何代码(界面、GNOME 与 KDE 等除外)。
我对发行版之间差异的细节不是很有经验,而且我也无法提供有关该项目的详细信息,因为它才刚刚进入规划阶段,除了它将在内核深处进行交互以进行交互尽可能多地使用计算机硬件。
答案1
开发时需要注意的一些要点
- 使用标准构建系统
- 避免硬编码
库路径 - 使用诸如
pkg-config
查找外部包之类的工具来代替。 - 如果您的应用程序有 GUI,请使用一些框架,例如
wxWidgets
可以根据您运行的位置呈现本机 UI 元素。 - 避免与无法在其他发行版上运行的包创建依赖关系。
完全确保您的应用程序适用于所有发行版的唯一方法是实际运行和测试它。实现此目的的一种方法是为每个发行版创建虚拟机。 VirtualBox 可以用来做到这一点。我的盒子上有大约 8 个虚拟机用于此类测试。
我认为您不能对部署应用程序进行过多概括,因为每个发行版都使用不同的安装包的方式。 Debian 使用deb
Fedora rpm
。
答案2
只是我的 2c,但我对官方存储库中的软件包附带的应用程序或从源代码编译的应用程序没有那么头疼。作为第 3 方二进制文件分发的应用程序往往会遇到一些依赖性问题。我通常需要追踪这些问题并手动解决它们。
因此,如果我要发布一个 Linux 应用程序,我要么将其打包并将其放入官方存储库。否则,我将以源代码形式分发它,并让用户为他们的系统编译它。
答案3
如果您正在为非嵌入式 Linux 编写代码,需要记住的主要事情是不同的发行版将具有不同的库版本集合。所以你应该设置一个足够旧的基线。由于 Debian 更新缓慢,Debian stable(或oldstable,如果存在的话,在发布后的几个月内)往往是一个合理的选择。
您需要为每个发行版单独打包。如果您的应用程序是开源的并且完全成功,您可以指望有人拿起它并贡献打包,所以这不是一项基本技能。除了包装之外,发行版之间的差异主要影响系统管理,而不是开发或日常使用。
如果您要修补内核,则必须使用更多发行版进行测试,因为每个发行版都有自己的补丁,这可能会导致不兼容,并且每个发行版都有可能依赖于可用的不同内核接口集的用户空间设置(例如,要求有些东西不是模块)。
请注意,如果您希望您的应用程序在嵌入式系统(这里指的是服务器、台式机或笔记本电脑以外的任何系统)上运行,那么我上面写的内容是不正确的,即使它们运行 Linux 内核,通常也没有常用的库,从...开始glibc被避开而有利于µClibc,饮食库,仿生, ETC。
答案4
发行版的主要区别在于打包和应用程序默认/配置。在确定的架构中运行的每个代码都应该在该架构的每个发行版上运行。此外,您还可以在 KDE 中轻松运行 GNOME 应用程序,反之亦然,因此您可以选择最适合您/您的用户群的应用程序,然后就完成了!