Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 2

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

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

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

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

Ответ 3

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

Кроме того, существует Стандартная база Linux, на которую вы можете ссылаться.

НТН, Amit

Ответ 4

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

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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