我正计划编写一个我希望能够在任何Linux安装上运行的应用程序,而不必在执行时重写任何代码(可能不包括界面,GNOME vs KDE等)。
我对发行版之间差异的细节不是很有经验,而且我也无法提供有关该项目的详细信息,因为它只是进入计划阶段,而不是要深入内核内部进行交互尽可能多地使用计算机的硬件。
我正计划编写一个我希望能够在任何Linux安装上运行的应用程序,而不必在执行时重写任何代码(可能不包括界面,GNOME vs KDE等)。
我对发行版之间差异的细节不是很有经验,而且我也无法提供有关该项目的详细信息,因为它只是进入计划阶段,而不是要深入内核内部进行交互尽可能多地使用计算机的硬件。
Answers:
开发时要记住一些要点,
pkg-config
查找外部软件包的工具。wxWidgets
可以根据运行位置呈现本机UI元素的框架。完全确保您的应用程序可在所有发行版上正常工作的唯一方法是在其上实际运行和测试。实现此目的的一种方法是为每个发行版创建虚拟机。VirtualBox可用于执行此操作。我的包装盒上有大约8个虚拟机用于这种测试。
我认为您不能在部署应用程序时一概而论,因为每个发行版都使用不同的软件包安装方式。Debian使用deb
和fedora rpm
。
如果您是针对非嵌入式Linux编写的,则要记住的主要事情是不同的发行版将具有不同的库版本集合。因此,您应该设置足够旧的基线。随着Debian的更新缓慢,Debian稳定版(或稳定存在的版本,在发行后的几个月内)往往是一个合理的选择。
您需要为每个发行版分别打包。如果您的应用程序是开源的并且完全成功,那么您可以指望有人捡起它并提供包装,因此这不是必不可少的技能。除包装外,发行版之间的差异主要影响系统管理,而不影响开发或日常使用。
如果要修补内核,则必须测试更多的发行版,因为每个发行版都有自己的补丁,这些补丁可能会导致不兼容,并且每个发行版都有用户区设置,这些设置可能取决于可用的不同内核接口集(例如要求对于某些东西不是模块)。
请注意,如果您希望您的应用程序在嵌入式系统(此处指的不是服务器,台式机或笔记本电脑)上运行,即使在运行Linux内核的情况下,它们通常也没有通常的库,但是我上面写的内容并不正确,从避开Glibc开始,转而使用µClibc,Dietlibc,Bionic等。
我发现Linux Standards Base
有用,特别是当您的应用程序包含服务(守护程序)时。查看以下站点:
但是,如果我仅限于资源,则可能是File Hierarchy Standard。