Является ли linux бинарный универсальным для всех видов дистрибутивов?

Мне довелось установить VHDL-симулятор модели sim на Linux. В руководстве сказано, что он поддерживает только RedHat или Suse, но я только что попытался установить его на Ubuntu. И я мог бы установить его без проблем.

enter image description here

  • Является ли Linux бинарным универсальным для всех видов распределения? Я имею в виду, если я создаю программу на дистрибутиве А, могу ли я быть уверен, что она будет работать на любом linux?
  • Почему большинство поставщиков коммерческих программ говорят, что программа работает на конкретном дистрибутиве? (в основном Redhat и Suse, а не Ubuntu)
15
задан 23 September 2012 в 10:01

3 ответа

И 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, используя alien . Затем установите. Если это сработало, ты в порядке. Если это не работает, используйте ldd, чтобы выяснить, какой файл библиотеки отсутствует. В худшем случае создайте виртуальную машину для этих других дистрибутивов Linux и запустите программу там.

0
ответ дан 23 September 2012 в 10:01

Я второй ответ j-g-faustus, но вы также должны быть осторожны с форматом пакета. Даже если сами исполняемые файлы являются переносимыми и присутствуют все необходимые библиотеки, разные дистрибутивы размещают файлы в разных местах и ​​используют разные инструменты для управления установленными пакетами. Если поставщик упаковывает свой продукт как пакет RPM, вам придется использовать пакет типа Alien ', чтобы конвертировать и установить его в дистрибутиве на основе DEB, например Ubuntu.

Если они распространяют свое программное обеспечение в виде исходного кода, то вы также можете скомпилировать его самостоятельно, после чего исполняемый файл будет адаптирован для вашей конкретной системы (но менеджер пакетов ubuntu не узнает об этом ).

0
ответ дан 23 September 2012 в 10:01

Это два вопроса:

Является ли бинарный файл Linux универсальным для всех дистрибутивов?

Это зависит от:

  • Если программа не использует ничего вне ядра Linux, оно будет универсальным, за исключением 32- или 64-битного вопроса. Linux "hello world" (минималистичная программа, которая просто печатает "hello world" в окне терминала), вероятно, может быть независимым от дистрибутива.
  • Если программа использует какую-либо неядерную библиотеку или службу (которая является большей частью Linux, ядро ​​довольно маленькое), есть различия в том, какие библиотеки включены, какие версии этих библиотек и где они расположены. Таким образом, в этом (наиболее распространенном) случае распределения не равны.

Почему многие коммерческие программы говорят, что они работают только на одном или нескольких дистрибутивах?

Поскольку существует очень большое количество дистрибутивов Linux , и никто не хочет тестировать свою программу на всех них.

Коммерческий поставщик обычно говорит, что он поддерживает только те дистрибутивы, на которых они тестировали свое программное обеспечение. Он может работать или не работать в других дистрибутивах, с точки зрения поставщика, дело лишь в том, что вы не можете жаловаться, если он не работает в дистрибутиве, который они не поддерживают.

Какие дистрибутивы будут выбраны для тестирования, зависит от того, что продавец ожидает от своих клиентов. Коммерческие / профессиональные программы обычно выбирают корпоративные дистрибутивы, возможно, исходя из соображений, подобных «люди, которые заплатили за их ОС, с большей вероятностью будут платить за наше программное обеспечение», возможно, просто путем подсчета дистрибутивов, используемых их существующими клиентами.

См. Также Марк Шаттлворт (парень, который является причиной того, что у нас есть Ubuntu, во-первых) о бинарной совместимости между Ubuntu и Debian - Debian является ближайшим дистрибутивом относительно Ubuntu.

0
ответ дан 23 September 2012 в 10:01

Другие вопросы по тегам:

Похожие вопросы: