linux二进制文件对所有发行版都是通用的吗?


15

我碰巧在Linux上安装了Model sim VHDL模拟器。该手册说它仅支持RedHat或Suse,但我只是尝试将其安装在Ubuntu上。而且,我可以毫无问题地安装它。

在此处输入图片说明

  • Linux二进制文件对所有发行版都通用吗?我的意思是,如果我在发行版A上编写程序,可以确定它可以在任何Linux上运行吗?
  • 为什么大多数商业程序供应商都说该程序在特定发行版上运行?(主要是Redhat和Suse,不是ubuntu)

Answers:


15

这是两个问题:

Linux二进制文件对所有发行版都通用吗?

这取决于:

  • 如果程序在Linux内核之外不使用任何东西,那么它将是通用的,除了32位或64位问题。Linux“ hello world”(一种仅将“ hello world”打印到终端窗口的简约程序)可能与发行版无关。
  • 如果程序正在使用任何非内核库或服务(在大多数Linux中,内核很小),则在包括哪些库,这些库的版本以及它们的位置方面存在差异。因此,在这种(最常见)情况下,分布不相等。

为什么许多商业程序说它们只能在一个或几个发行版上工作?

因为有很多Linux发行版,并且没有人愿意在所有发行版上测试他们的程序。

商业供应商通常会说他们仅支持对其软件进行测试的发行版。从供应商的角度来看,它可能会或可能不会在其他发行版上起作用,重点是,如果它不能在他们不支持的发行版上起作用,您就可以抱怨。

选择哪种发行版本进行测试取决于供应商期望其客户使用的版本。商业/专业程序通常选择企业发行版,可能是通过类似于“为自己的操作系统付费的人更可能为我们的软件付费”的推理,可能只是通过计算现有客户使用的发行版。

关于Ubuntu和Debian之间的二进制兼容性,另请参阅Mark Shuttleworth(这是我们首先拥有Ubuntu的原因的家伙)-Debian是Ubuntu 的最近亲戚


2

RedHat和SUSE都具有悠久的企业Linux传统,并设法为其制作和测试了这些软件包。随着时间的流逝,将有更多经过测试可在Ubuntu上使用的软件包的示例。实际上,自去年以来,许多此类软件包都经过了与Ubuntu一起使用的测试。随着Canonical与更多供应商达成协议,将会有更多经过Ubuntu认证的软件包。

第一个问题:如果要制作一个可以在所有发行版上运行的程序,请创建一个静态(与动态相比)可执行文件。甲statically-linked可执行不依赖于系统库,因此可以分布之间工作,只要该体系结构(如Intel / AMD)是相同的。

这是一个程序,

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

让我们像往常一样编译

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

那么,您可以使用该VHDL程序做什么?获取的.rpm文件,并将其转换使用到的.deb 外星人。然后,安装。如果可行,您就可以了。如果它不起作用,请使用ldd找出缺少的库文件。在最坏的情况下,请为其他Linux发行版创建虚拟机,然后在其中运行程序。


1

我第二次jg-faustus的答复,但是,您还需要注意软件包格式。即使可执行文件本身是可移植的,并且存在所有必需的库,但不同的发行版会将文件放在不同的位置,并使用不同的工具来管理已安装的软件包。如果供应商将其产品打包为RPM软件包,则您将必须使用“外来者”将其转换并安装在基于DEB的发行版(如Ubuntu)下。

如果他们将软件作为源代码分发,那么您也可以自己进行编译,这时可执行文件将针对您的特定系统进行量身定制(但是ubuntu软件包管理器将对此一无所知)。

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.