Я собрал более новые версии gcc для rhel6 для нескольких версий (с 4.7.x до 5.3.1).
Процесс довольно прост благодаря сборкам Redhat Jakub Jelinek fedora gcc, найденным на кодзи
Просто возьмите последнюю версию src rpm для любой нужной вам версии (например, 5.3.1 ).
По сути, вы должны начать с определения требований к сборке, выполнив rpm -qpR src.rpm
поиск требований к любой версии:
rpm -qpR gcc-5.3.1-4.fc23.src.rpm | grep -E '= [[:digit:]]'
binutils >= 2.24
doxygen >= 1.7.1
elfutils-devel >= 0.147
elfutils-libelf-devel >= 0.147
gcc-gnat >= 3.1
glibc-devel >= 2.4.90-13
gmp-devel >= 4.1.2-8
isl = 0.14
isl-devel = 0.14
libgnat >= 3.1
libmpc-devel >= 0.8.1
mpfr-devel >= 2.2.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
systemtap-sdt-devel >= 1.3
Теперь начинается утомительная часть: любой пакет, версия которого выше, чем предоставленная yum для вашего дистрибутива, должен быть загружен из коджи , и рекурсивно повторяйте процесс, пока не будут выполнены все требования к зависимостям.
Я обманываю, кстати.
Я обычно переупаковываю rpm, чтобы он содержал правильное дерево сборки, используя утилиту gnu для использования правильно размещенных и именованных требований, поэтому gmp / mpc / mpfr / isl (cloog больше не требуется) загружаются и отправляются на правильный путь, а новый (раздутый) tar перестраивается в новый src rpm (с небольшими изменениями в spec-файле) без зависимости от их упакованных (rpm) версий. Поскольку я не знаю никого, кто бы использовал ADA, я просто удаляю части, относящиеся к gnat, из specfile, еще больше упрощая процесс сборки, и мне остается только беспокоиться о binutils.
Gcc может на самом деле собираться с более старыми binutils, поэтому, если вы спешите, отредактируйте файл спецификации так, чтобы он требовал версию binutils, уже имеющуюся в вашей системе. Это приведет к слегка поврежденному GCC, но в основном это будет достаточно хорошо.
Это работает довольно хорошо в основном.
ОБНОВЛЕНИЕ 1
Простейший способ открытия src rpm - это, вероятно, yum установить rpm и получить доступ ко всему в ~ / rpmbuild, но я предпочитаю
mkdir gcc-5.3.1-4.fc23
cd gcc-5.3.1-4.fc23
rpm2cpio ../gcc-5.3.1-4.fc23.src.rpm | cpio -id
tar xf gcc-5.3.1-20160212.tar.bz2
cd gcc-5.3.1-20160212
contrib/download_prerequisites
cd ..
tar caf gcc-5.3.1-20160212.tar.bz2 gcc-5.3.1-20160212
rm -rf gcc-5.3.1-20160212
# remove gnat
sed -i '/%global build_ada 1/ s/1/0/' gcc.spec
sed -i '/%if !%{build_ada}/,/%endif/ s/^/#/' gcc.spec
# remove gmp/mpfr/mpc dependencies
sed -i '/BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1/ s/.*//' gcc.spec
# remove isl dependency
sed -i '/BuildRequires: isl = %{isl_version}/,/Requires: isl-devel = %{isl_version}/ s/^/#/' gcc.spec
# Either build binutils as I do, or lower requirements
sed -i '/Requires: binutils/ s/2.24/2.20/' gcc.spec
# Make sure you don't break on gcc-java
sed -i '/gcc-java/ s/^/#/' gcc.spec
У вас также есть возможность установить префикс, чтобы этот rpm устанавливался бок о бок, не нарушая дистрибутив rpm (но требует изменения имени и некоторых модификаций внутренних имен пакетов). Я обычно добавляю модуль среды, чтобы я мог загружать и выгружать этот gcc по мере необходимости (аналогично тому, как работают коллекции) как часть rpm (поэтому я добавляю новую зависимость).
Наконец, создайте дерево rpmbuild и поместите файлы, куда они должны пойти и соберите:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
ОБНОВЛЕНИЕ 2
Обычно для разработки не следует использовать «серверную» ОС - поэтому у вас есть Fedora, которая уже поставляется с последней версией gcc. У меня есть некоторые особые требования, но вам стоит подумать об использовании правильного инструмента для этой задачи - rhel / centos для запуска производственных приложений, fedora для разработки этих приложений и т. Д.