https://hub.docker.com/r/hoshimin/anylinux Anylinux - Docker-образ на базе Ubuntu 18.04 с переносимым тулчейном для разработки на C++. Тулчейн содержит компиляторы, системы сборки и базовое окружение новейших версий. В Linux существует проблема с обновлением софта: в большинстве дистрибутивов софт фиксируется на версиях, существовавших на момент выхода дистрибутива в релиз, и больше не обновляется до новых мажорных версий. Это обеспечивает стабильное состояние системы, гарантирующее отсутствие ломающих изменений, но вносит проблемы с разработкой софта под разные версии дистрибутивов. Большинство дистрибутивов опираются на экосистему GNU - в частности, на библиотеку Glibc, которая служит не только библиотекой си, но и слоем POSIX API, оборачивающим сисколлы ядра в стандартные POSIX-функции. В Glibc гарантируется строгая обратная совместимость: приложение, собранное под более старый Glibc, гарантированно запустится на более новом. Но приложение, собранное под более новый Glibc, гарантированно НЕ запустится на более старом. Отсюда следует необходимость собирать приложение или под каждый дистрибутив отдельно, или собирать приложение на самом старом поддерживаемом дистрибутиве, используя старые тулчейны. Но есть и более сложный путь: если мы хотим использовать самые новые версии компиляторов, мы можем собрать их сами на старом дистрибутиве с минимально необходимой версией Glibc - в этом случае получим и новейший переносимый тулчейн, и возможность собирать им переносимые приложения, которые тоже будут зависеть от старого Glibc. Это и сделано в Anylinux: в качестве базовой системы выбрана Ubuntu 18.04 как система с достаточно старым Glibc, чтобы покрывать большинство современных дистрибутивов. В этом окружении собраны новейшие компоненты для разработки: * GCC и Clang. * Отладчик GDB. * Системы сборки (CMake, Make, GNU Autotools). * Основные утилиты GNU (Coreutils, Binutils, Diffutils, Grep, Less и т.д.). * Скриптовые движки (Python, Perl, Lua). * Несколько musthave-утилит и библиотек (PkgConf, PatchELF, Neovim, Nano, Tmux). Полный список с версиями см. на Dockerhub. Все компоненты переносимы на дистрибутивы с Glibc не ниже 2.27: можно запаковать любой компонент в архив и унести из контейнера наружу. Некоторые компоненты (в частности, GCC и Clang) собраны с -march=x86-64-v3, для которых требуется поддержка AVX2. Компиляторы собраны с -O3 и FullLTO для достижения максимальной производительности. Скачать образ: Код (Bash): docker pull hoshimin/anylinux Запустить: Код (Bash): docker run --rm -it \ -e TERM=xterm-color \ -tmpfs /tmp:rw \ -tmpfs /run:rw \ hoshimin/anylinux:latest Все компоненты лежат в /opt/. Включение и отключение компонентов производится прописыванием каждого компонента в PATH, PKG_CONFIG_PATH и LD_LIBRARY_PATH. За это отвечает скрипт /etc/profile.d/toolchain.sh, запускающийся автоматически при входе в контейнер: сразу после входа вы получаете полностью настроенное окружение. Способы сборок тулчейном для GCC и Clang описаны в инструкции на Dockerhub.