Comments 28
1. Если вам так хочется самим рулить версиями пакетов — возьмите gentoo|arch, будут вам на выбор gcc от 6.5 до 11.0 и без танцев с бубном. Все патчи предоставит дистрибутив.
2. Ну или по современному — делайте сброку в докер контейнере. Благо у gcc есть официальные образы с версиями от 8 и выше. Тогда сменить версию можно будет поменяв пару цифр в пайплайне сборки приложения.
Просто не везде докер хорошо подходит, особенно когда требуется выжать из железа все соки.
Какие ещё соки? Контейнеры это просто средство изоляции, там нет никаких абстракций дополнительных от железа.
Сеть и доступ к файлам там таки виртуализируются — со всеми вытекающими. Да, это не то же самое что и в KVM, но всё равно накладные расходы есть, и они очень ощутимы если очень много ввода-вывода (с сетью или файлами), особенно если это всё крутится на недоверенной системе со всеми примочками против спектра и компании, и особенно если этих контейнеров много на одной железке.
чем не угодил?
Можно было взять готовый gcc-9.3.1 src.rpm из Fedora, и пересобрать его.
Как зависимость стоит системный gcc 10.2 без указания 9й версии. К примеру тут наоборот gcc 8 aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=cuda-10.2
Вы вероятно используете инсталер под дистрибутив, отсюда не совместимость, у нас же обычно все пакеты с убунты берутся и распаковываются, и подменяются библиотеки на системные. К примеру если удалить libstdc++.so libstdc++.so.6 идущие с пакетом от другого дистрибутива, то решается большая часть глюков, и приложения подхватываются системную библиотеку. Например я их удаляю в Matlab и Intel Quartus.
А у меня AMD видео и процессор, и наоборот llvm и gcc новые дают хорошую прибавку скорости.
К примеру системный zlib у меня заменен на более быстрый zlib-ng.
На моей памяти обычно вся не совместимость решается просто удалением libstdc++.so libstdc++.so.6 libncurses++.so* libncurses.so* идущие в составе пакета, дальше приложение при запуске не находит их и берет просто системные.
кстати с обновлением компилятора в fedora вроде был прикол: при сборке ядра свежим gcc приехали ошибки, вроде bcache пострадал
Не multilib, а multiarch. Я не знаю, как там в ваших быстродохнующих центосях, а в дебиан мультиарч контролируется тривиально с помощью dpkg.
$ dpkg --print-foreign-architectures
i386
$ dpkg --print-architecture
amd64
Заметим, включение этой штуки — осмысленное деяние во имя стима (на моём десктопе), и выключение довольно тривиально.
В целом, вся возня в районе спеков у меня всегда вызывала повышенную брезгливость. Какое-то оно уродливое, в сравнении в debian/rules. При том, что к оному rules претензий выше крыши, с инженерной точки зрения оно куда более элегантное.
Будни DevOps: cобираем gcc 9.3.1 под CentOS 8