Бинарная совместимость дистрибутива Linux - PullRequest
23 голосов
/ 08 января 2010

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

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

Ответы [ 9 ]

18 голосов
/ 08 января 2010

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

10 голосов
/ 08 января 2010

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

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

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

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

6 голосов
/ 08 января 2010

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

Кроме того, есть Стандартная база Linux , к которой вы можете обратиться.

НТН, Amit

5 голосов
/ 15 февраля 2016

Я понимаю, что это очень старый вопрос, но он высоко поднимается в результатах поиска, и это не упоминалось:

CDE - это инструмент для создания переносимых приложений Linux . Этот инструмент объединяет все необходимые файлы (включая библиотеки) путем анализа во время выполнения. Я успешно использовал его на инструментах командной строки несколько раз, один из примеров - запуск tcpdump на старом аппаратном устройстве, работающем с пользовательским дистрибутивом. CDE также не требует исходного кода, он просто упаковывает исполняемый файл, который вы можете запустить.

В какой-то момент у меня возникла ошибка при запуске команды cde, которая была исправлена ​​путем добавления команды к LD_ASSUME_KERNEL=2.4.1, в последних версиях это может не потребоваться, так как это было годы назад.

Код также есть на GitHub: https://github.com/pgbovine/CDE

4 голосов
/ 08 января 2010

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

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

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

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

4 голосов
/ 08 января 2010

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

2 голосов
/ 08 января 2010

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

2 голосов
/ 08 января 2010

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

0 голосов
/ 27 сентября 2012

LSB определенно стоит проверить. Хотя в отношении работы с библиотеками я был наиболее удовлетворен этим ответом здесь, в SO https://stackoverflow.com/questions/1209674/shipping-closed-source-application-for-linux/1242738#1242738, и этой подробной обработкой механизма rpath http://www.eyrie.org/~eagle/notes/rpath.html

...