C++ приложение, запускаемое на любом дистрибутиве linux

211
22 ноября 2017, 00:00

Возможно ли скомпилировать приложение под linux (x64), имеющее зависимости, которое можно запустить на любом дистрибутиве linux без дополнительных действий со стороны сисадмина (компиляция, установка библиотек...)? Пробовал поставлять со всеми библиотеками и запускать с ld_library_path. Работает, но только на одинаковых дистрибутивах, иначе возникает ошибка связанная со стандартной библиотекой(не помню уже). Подумывал в сторону Docker, но нужно опять же его устанавливать. Возможно ли вообще сделать то что я пишу и какой разумный компромиcс если нет?

Answer 1

возникает ошибка связанная со стандартной библиотекой(не помню уже)

Очень много информации... :-) Подозреваю, что дело тут не в разных дистрибутивах, а в разных версиях этой библиотеки на разных дистрибутивах. Проще:

Вы разработали и собрали свою программу на хосте, где была установлена библиотека libaaa.7.so.

Вы перенесли ELF на другой хост, где установлена libaaa.6.so.

При запуске программы выдастся сообщение о том, что загрузчик не может найти седьмую версию этой библиотеки. И эта ситуация возможна на одном дистрибудитве, если на одном хосте установлена последняя версия. а на друго - более старая.

Бороться с этим можно двумя способами:

  1. Инсталлировать Вашу программу с помощью стандартного Linux механизма - пакетов. rpm или deb или и то и другое. Тогда требуемый апгрейд выполнится автоматически.
  2. Попробовать обмануть загрузчик, выполнив команду вроде этой:

    sudo ln -s libaaa.6.so libaaa.7.so

Но это рисковано...

А вот это:

реальное приложение действительно нужно компилировать для каждого дистрибутива

типичный видовозный подход - одна версия для семёрки, другая для.... Не повторяйте этой ошибки!

READ ALSO
WinAPI C++ GDI черный экран через некоторое время работы

WinAPI C++ GDI черный экран через некоторое время работы

Программа работает некоторое время корректно, но потом без видимых причин просто превращает кадр в черный квадратГрешил на переполнение...

264
Рисуем свою кнопку

Рисуем свою кнопку

Рисую свою кнопку так:

239
Помогите понять условие задания

Помогите понять условие задания

Создать иерархию классов представляющих простое наследованиеБазовый класс – строка символов (char *)

257