Чи є бінарний Linux універсальним для всіх видів дистрибутивів?


15

Мені трапляється встановлювати модельний симулятор VHDL в Linux. Посібник говорить, що він підтримує лише RedHat або Suse, але я просто спробував встановити його на Ubuntu. І я міг би встановити його без жодних проблем.

введіть тут опис зображення

  • Чи є бінарний Linux універсальним для всіх видів дистрибуції? Я маю на увазі, якщо я зроблю програму на розподіл A, чи можу я бути впевненим, що вона буде працювати на будь-якому Linux?
  • Чому більшість постачальників комерційних програм каже, що програма працює на певному розповсюдженні? (в основному Redhat і Suse, не ubuntu)

Відповіді:


15

Це два питання:

Чи є універсальним для всіх дистрибутивів бінарний файл Linux?

Це залежить:

  • Якщо програма нічого не використовує поза ядром Linux, вона буде універсальною, за винятком 32- або 64-бітного питання. "Привіт світ" Linux (мінімалістична програма, яка просто друкує "привіт світ" у вікно терміналу), ймовірно, може бути незалежним від розповсюдження.
  • Якщо програма використовує будь-яку бібліотеку чи сервіс, що не має ядра (що є більшою частиною Linux, ядро ​​досить мало), існують відмінності в тому, які бібліотеки включені, які версії цих бібліотек і де вони знаходяться. Тож у цьому (найбільш поширеному) випадку розподіли не рівні.

Чому багато комерційних програм кажуть, що вони працюють лише на одній або декількох дистрибутивах?

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

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

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

Дивіться також Марка Shuttleworth (хлопець, що є причиною того, що ми маємо Ubuntu в першу чергу) про бінарну сумісність між Ubuntu і Debian - Debian є найближчим розповсюдженням Ubuntu.


2

І RedHat, і SUSE мають давню традицію Linux для 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 про це не знатиме).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.