Бинарная совместимость дистрибутива Linux

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

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

9 ответов


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


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

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

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

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


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

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

HTH, Amit


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

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

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

код также находится на GitHub:https://github.com/pgbovine/CDE


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


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

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

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

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


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


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


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