Eu criei versões mais recentes do gcc para rhel6 para várias versões agora (desde 4.7.x a 5.3.1).
O processo é bastante fácil graças às versões do Redhat Jakub Jelinek fedora gcc encontradas no koji
Basta pegar o src rpm mais recente para a versão que você precisar (por exemplo, 5.3.1 ).
Basicamente, você começaria determinando os requisitos de construção emitindo a rpm -qpR src.rpm
procura de quaisquer requisitos de versão:
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
Agora vem a parte tediosa - qualquer pacote com uma versão superior à fornecida pelo yum para a sua distro precisa ser baixado do koji e repita recursivamente o processo até que todos os requisitos de dependência sejam atendidos.
Eu trapaceio.
Eu costumo reembalar o rpm para conter uma árvore de construção correta, usando o recurso gnu para usar os requisitos corretamente colocados e nomeados, para que gmp / mpc / mpfr / isl (o cloog não seja mais necessário) sejam baixados e desagradáveis no caminho correto, e o novo O tar (inchado) é reconstruído em um novo src rpm (com pequenas alterações no arquivo spec) sem dependência de suas versões compactadas (rpm). Como não conheço ninguém usando o ADA, simplesmente removo as partes referentes ao gnat do arquivo de especificações, simplificando ainda mais o processo de compilação, deixando-me apenas com binutils com os quais me preocupar.
O Gcc pode realmente construir com binutils mais antigos; portanto, se você estiver com pressa, edite ainda mais o arquivo de especificações para exigir a versão do binutils já presente no seu sistema. Isso resultará em um gcc um pouco aleijado, mas, na maioria das vezes, terá um desempenho suficiente.
Isso funciona muito bem principalmente.
ATUALIZAÇÃO 1
O método mais simples para abrir um src rpm é provavelmente yum instalar o rpm e acessar tudo em ~ / rpmbuild, mas eu prefiro
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
Você também tem a opção de definir o prefixo para que este rpm seja instalado lado a lado sem interromper o distro rpm (mas requer mudança de nome e algumas modificações nos nomes dos pacotes internos). Normalmente, adiciono um módulo de ambiente para poder carregar e descarregar esse gcc conforme necessário (semelhante ao modo como as coleções funcionam) como parte do rpm (para adicionar uma nova dependência).
Por fim, crie a árvore rpmbuild e coloque os arquivos para onde o hey deve ir e construir:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
ATUALIZAÇÃO 2
Normalmente não se deve usar um sistema operacional "server" para desenvolvimento - é por isso que você tem o fedora que já vem com o gcc mais recente. Eu tenho alguns requisitos específicos, mas você deve realmente considerar o uso da ferramenta certa para a tarefa - rhel / centos para executar aplicativos de produção, fedora para desenvolvê-los etc.