LINUX.ORG.RU

Можно ли получить новый g++ с библиотекой на старой системе?

 , ,


0

1

Привет, ЛОР.

Тут народ хочет писать, компилировать и использовать новейший плюсовый код (включая модули из C++20 и u32string) на двух сильно старых системах. Одна на базе Debian Wheezy, другая на CentOS 7.

Можно ли как-то собрать под эти системы (особенно под дебиан интересно, с центосом опционально, но тоже желательно) современный наисвежайший g++ с современной же плюсовой стандартной библиотекой? Ребята осознают, что задача нетривиальная, и готовы некоторое время потрахаться, главное, чтобы результат получить.

Нет, сертификации там никакой нет (это первое, что я у них спросил), сторонние исходники использовать можно. Единственное ограничение — не ломать и не удалять уже установленные пакеты. Т.е. новый gcc надо собрать так, чтобы он мог вызываться в качестве альтернативы к существующему (через /etc/alternatives, например).

Задача реальна и если да, то КАК?

★★★★★

Реально, я на Slackware 14.2 собирал gcc9.2, просто собираешь и все, а g++ это обязательное условие?

Есть https://apt.llvm.org/

Есть zig-cc

Можно еще поставить Docker и собирать статические приложения из актуального дистрибутива (хотя и CentOS 7 актуален).

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 3)

А в чём, собственно, подвох? Мы так делаем, правда никогда «последний распоследний» gcc не берём. libstdc++ приходит с ним. gcc prerequisites, но там довольно «демократично» всё.

bugfixer ★★★★★
()

Не так давно на Slackware 14.2 собирал GCC 12 до его релиза. Сначала достаточно попробовать что-то вроде:

mkdir build
cd build
../configure --disable-bootstrap --program-suffix=-12.1 --disable-multilib --prefix=/opt/gcc-12.1 --enable-languages=c # потом можно заменить на [c,]c++[,lto]

Вероятнее всего заработает, тогда можно править опции и собирать нормально. Если не заработает, то ему надо ещё зависимости будет собирать (mpfr, gmp, такое). В Интернете есть готовые скрипты, которые выкачивают нужные тарболы и собирают GCC по ним.

Командой выше после make install поставится в /opt и после правки $PATH можно будет использовать. Можно и в /usr ставить и пакет checkinstall’ом сделать, но надо смотреть (передать свой --build=), чтобы triplet не совпадал с системным, иначе оно затрёт уже установленное.

xaizek ★★★★★
()

Скачать архив gcc, распаковать, далее INSTALL/prerequisites.html. Если сильно повезет, то требуемые версии gcc и библиотек уже будут в репозитории дебиана (gcc >= 4.8 для сборки свежей версии). Иначе собрать сначала какую-нибудь промежуточную версию.

undef ★★
()

yum install centos-release-scl

yum update

yum install devtoolset-11-gcc-c++ devtoolset-11-gcc

Если gcc 11 не достаточно, то только компиляция.

sniper21 ★★★★★
()
Последнее исправление: sniper21 (всего исправлений: 2)

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

может проще собрать тогда новую билд машину? даже виртуальную. даже lxc например?

kindof
()

Можно пойти по пути, что любят в HPC:

  • Environment Modules для управления переменными окружения, в том числе и PATH.
  • EasyBuild для сборки различных библиотек, инструментов и т.п.

И выбирай компилятор + библиотеки в любой момент.

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

После настройки будут использовать как-то так:

module load GCC/12.1.0
g++ --std=c++20 hello.cpp
AlexVR ★★★★★
()
Последнее исправление: AlexVR (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Есть https://apt.llvm.org/

Есть zig-cc

zig поддерживает только относительно новые ядра Linux(3.16+)

https://ziglang.org/download/0.9.1/release-notes.html#Support-Table

Я спросил в LLVM discord там мне написали, что нет какой-то чёткой минимальной версии, но они стараются не ломать и новый clang используется для старых RHEL.

https://imgur.com/a/jmLYToe

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

И для Debian Wheezy нету пакетов в apt.llvm.org, затупил по полной.

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

А если ты собрал распоследний (или не очень) gcc с соответствующей стандартной библиотекой, значит ли это, что твой софт будет линковаться с ней, и на машине у заказчика может не завестись, если он не соберёт у себя то же самое?

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

софт будет линковаться с ней, и на машине у заказчика

В нашем случае - мы сами себе заказчики. Проблема которая решается - в «зоопарке» машин (счёт на тысячи) - нужен стабильный build env который даже от patch level OS не зависит. Gcc’шный runtime потом раздаётся по NFS с HA cluster’а. Туда же наш софт деплоится.

А вообще - «rpath» наше всё.

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

Если не нужна dlopen, можно статикой слинковать libstdc++

fluorite ★★★★★
()

Собираешь тулчейн например с помощью crosstool-ng, сидишь в своём любимом окружении собираешь под любое говно мамонта с новыми стандартами. Из нюансов - все зависимости придётся носить с собой. Но точно подход рабочий даже под rhel4 не то, что под 7ой.

В качестве основы системы сборки рекомендую взять CMake т.к. там под кросскомпиляцию всё прям хорошо заточено.

Ну а доки - сам почитаешь наверн?

faq2
()

PG из Яндекса ведет блог о статической компиляции. Тебе это может быть интересно: https://t.me/itpgchannel

ну и нет задачи разрабатывать на wheezy (если конечно всё в порядке с головой), можно разрабатывать на чем-то из этого тысячелетия, а в CI компилить под wheezy, причем компилить с бандлингом всех зависимостей

max_lapshin ★★★★★
()

для этого лучше использовать crosstool-ng.

splinter ★★★★★
()

у меня была система для сборки portable linux binaries на основе HBB (гуглится и ищется на гитхабе), на основе CentOS 6. Новый gcc и нужные библиотеки я туда сам в /opt собирал. Проблем особых не было. Так что собирать можно.

Потом этим делом собирал своё приложение и паковал в AppImage.

Почему CentOS: выбирал LTS систему с саааамым древним glibc. Что бы новые версии символов не тащились: у них там версионирование и обратная совместимость, т.е. старый символ на новой glibc работать будет.

hatred ★★★
()

Скорее всего соберешь. Стать в prefix и потом вызывай оттуда. Делов-то

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