LINUX.ORG.RU

Компиляция программы под множество дистрибутивов (С++17)

 


0

2

Добрый вечер,

Пытаюсь свою программу, написанную на С++17, собрать так, чтобы она поддерживалась:

  • различными дистрибутивами (приоритет: Дебиан, Убунту, Федора, РедХат)
  • более поздними версиями указанных дистрибутивов

Например используя виртуальные машины я собрал на Убунту 22.04, но я не смог ее запустить на Убунту 20.04 (как помню GLIBC не той версии).

Потом попробовал собрать на Убунту 20.04, смог запустить на Убунту 22.04, но на Дебиан 10.12 (и Дебиан 11.3 вроде тоже) не завелась.

Пробовал собрать на Дебиан 11.3, работает на Федора 34, но на Убунту не пашет (даже на 22.04, вроде libnsl.so мешала).

Хотелось бы понять, на каком дистрибутиве мне собирать программу, чтобы поддержать более старые версии дистрибутивов (желательно Убунту 18 (или 16), Дебиан 10 (или 9), Федора 34 (может и раньше)).

Так как мне нужна полная поддержка С++17, я думаю нужен дистрибутив с GCC-9, но Дебиан 11.3 он уже идет с GCC-10.


Принцип простой - собранное в старом дистрибутиве может запуститься в новом, наоборот - нет.

Поэтому нет другого выхода, как выбрать дистрибутив с самой старой версией glibc и собирать в нем.

Придется установить туда более новый gcc, например собрать из исходников.

James_Holden ★★★★
()
Последнее исправление: James_Holden (всего исправлений: 2)
Ответ на: комментарий от James_Holden

Спасибо большое за внимание к теме,

Не в курсе, если говорить про Дебиан (или Федора), это мне примерно какую версию ориентироваться?

kerim
() автор топика

Можно установить версию компилятора поновее в CentOS 7 и использовать его как билд-хост, обычно многие так и делают, ибо собранное в RHEL/CentOS 7 запускается практически на всём.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Это интересно, я с CentOS дел не имел пока, щас погуглю

kerim
() автор топика

Зачем так мучаться? Распространяй только исходники, дистрибутивы сами что им нужно соберут.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Мучаться полезно :)

Для меня это не выход, надо компайлить

kerim
() автор топика
Ответ на: комментарий от James_Holden

C++17

выбрать дистрибутив с самой старой версией glibc и собирать в нем.

На совсем старых дистрибутивах будет ещё ограничение в версии поддерживаемого стандарта. В некоторых случаях приходится собирать свой кросскомпилятор через утилиту типа crosstool-ng. И на этом компилятор собирать свое ПО.

pathfinder ★★★★
()

Сейчас модно flatpak.

ox55ff ★★★★★
()
Ответ на: комментарий от d_a

Получилось с CentOS 7 и devtoolset 11.

Проверил на Debian 10.12, Debian 11.3, Ubuntu 18.04, Ubuntu 20.04, Ubuntu 22.04, Fedora 34 все работает.

Благодарю за помощь

kerim
() автор топика
Ответ на: комментарий от sigurd

Спасибо за информацию, с этим не сталкивался.

На будущее буду иметь ввиду

kerim
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.