Совместимость на уровне двоичных кодов дистрибутива Linux

Какой-либо способ сделать двоичный файл в дистрибутиве Linux и выполнить его на другом распределении с той же архитектурой? Или я должен скомпилировать и создать его на различных дистрибутивах?

Есть ли между Redhat совместимость, Debian основывал дистрибутивы для двоичных файлов? (Я хочу использовать свой двоичный файл Ubuntu на мягкой фетровой шляпе!)

23
задан Guillaume 13 December 2016 в 11:13
поделиться

7 ответов

Моя версия, используя падение:

every n xs = case drop (n-1) xs of
              (y:ys) -> y : every n ys
              [] -> []

Редактирование: Это также работает для конечных списков. Для бесконечных списков только в списках раствор Чарльза Стюарта немного короче.

-121--1309850-

Введите стандартную базу Linux , чтобы уменьшить различия между отдельными распределениями Linux. См.

18
ответ дан 29 November 2019 в 01:32
поделиться

Вы можете статически связать свои исполняемые файлы для переносимости.

2
ответ дан 29 November 2019 в 01:32
поделиться

Статическое связывание ваших двоичных файлов делает их LESS переносимыми, потому что некоторые библиотеки в этом случае будут работать некорректно на этой машине (различные методы аутентификации и т.д.).

Если вы статически связываете любые "необычные" библиотеки и сводите свой набор поддерживаемых дистрибутивов к минимуму, вы должны быть в порядке.

Не связывайте статически библиотеку C (или весь бинарник), это рецепт проблемы :)

Посмотрите, что (например) Google делает с Chrome.

10
ответ дан 29 November 2019 в 01:32
поделиться

На каком языке кодируется ваше приложение? Если оно написано на таком языке, как Python (и без привязки к Си), или на Java, или любом другом языке, основанном на ВМ, то я думаю, что вы можете доверять ВМ, чтобы убедиться, что ваше приложение будет работать на разных дистрибутивах Linux.

Также есть Linux Standard Base, на который вы можете ссылаться.

HTH,Amit

6
ответ дан 29 November 2019 в 01:32
поделиться

Работает. Но это также зависит от версии используемых вами разделяемых библиотек, включая libc, libstdc ++, которые принудительно устанавливаются версией компилятора, которая может отличаться от дистрибутива к дистрибутиву.

4
ответ дан 29 November 2019 в 01:32
поделиться

Обычно можно использовать двоичные файлы в разных дистрибутивах Linux, если у вас есть один и тот же набор доступных библиотек. Вы можете использовать ldd, чтобы проверить, какие библиотеки нужны двоичному файлу. libc обязательно должна иметь ту же версию в задействованных дистрибутивах.

2
ответ дан 29 November 2019 в 01:32
поделиться

Лучший способ - распространить исходный текст и облегчить сборку исходного текста на любом разумном дистрибутиве Linux. Это лучше, чем двоичный дистрибутив, потому что этого недостаточно для того, чтобы сделать двоичный дистрибутив совместимым с разделяемыми библиотеками. Вам также нужно убедиться, что вы адаптируете свою программу к таким вещам, как указанные в дистрибутиве места и соглашения о том, куда идут веб-приложения, или как отправляется электронная почта, или как запускаются службы, или как определить размер бумаги по умолчанию, или бесчисленное множество других деталей.

Смотрите, например, Руководство по политике Debian документ, описывающий многие вещи, которые дистрибутив должен решить для обеспечения совместимости между приложениями, запущенными на нём. Вам не нужно читать его или изучать наизусть, но он показывает масштаб проблем, которые могут вас сбить с толку.

Вероятно, вам следует работать вместе с несколькими основными дистрибутивами, чтобы убедиться, что ваше приложение хорошо работает со всеми ними. Большинство разработчиков дистрибутивов с радостью помогут, если вы к ним вежливо подойдете. Если вам повезёт, вы можете привлечь добровольцев из дистрибутивов, чтобы сделать бинарную упаковку для вас, и это быстро даст вам обратную связь о том, что вам нужно изменить на уровне исходных текстов, чтобы сделать ваше приложение простым в упаковке.

Стандартная база Linux Linux Standard Base , о которой уже упоминали другие, пытается разработать кросс-дистрибутивное решение для этих переменных, но оно не является исчерпывающим и не полностью поддерживается большинством дистрибутивов. Однако большинство дистрибутивов считают это проблемой, если они случайно нарушают LSB совместимость.

4
ответ дан 29 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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