Ich habe jetzt für mehrere Versionen neuere gcc-Versionen für rhel6 erstellt (seit 4.7.x bis 5.3.1).
Der Prozess ist dank Redhats Jakub Jelinek Fedora Gcc Builds auf Koji ziemlich einfach
Holen Sie sich einfach die neueste src-Drehzahl für die gewünschte Version (z . B. 5.3.1 ).
Grundsätzlich würden Sie zunächst die Build-Anforderungen ermitteln, indem Sie rpm -qpR src.rpm
nach Versionsanforderungen suchen:
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
Jetzt kommt der mühsame Teil - jedes Paket, dessen Version höher ist als die von yum für Ihre Distribution bereitgestellte, muss von Koji heruntergeladen werden und den Vorgang rekursiv wiederholen, bis alle Abhängigkeitsanforderungen erfüllt sind.
Ich betrüge übrigens.
Normalerweise packe ich die Drehzahl neu, um einen korrekten Build-Baum zu verwenden, indem ich die gnu-Funktion verwende, um korrekt platzierte und benannte Anforderungen zu verwenden. Daher werden gmp / mpc / mpfr / isl (Cloog ist nicht mehr erforderlich) heruntergeladen und in den richtigen Pfad verschoben, und der neue (aufgeblähter) Teer wird in eine neue src-Drehzahl (mit geringfügigen Änderungen an der Spezifikationsdatei) ohne Abhängigkeit von den gepackten (RPM-) Versionen umgebaut. Da ich weiß, dass niemand ADA verwendet, entferne ich einfach die Teile, die sich auf Mücken beziehen, aus der Spezifikationsdatei, was den Erstellungsprozess weiter vereinfacht und mir nur Binutils übrig lässt, über die ich mir Sorgen machen muss.
Gcc kann tatsächlich mit älteren Binutils erstellen. Wenn Sie es also eilig haben, bearbeiten Sie die Spezifikationsdatei weiter, um die Binutils-Version zu benötigen, die bereits auf Ihrem System vorhanden ist. Dies führt zu einem leicht verkrüppelten gcc, aber meistens funktioniert es gut genug.
Das funktioniert meistens ganz gut.
UPDATE 1
Die einfachste Methode zum Öffnen einer src-Drehzahl ist wahrscheinlich, die Drehzahl zu installieren und auf alles unter ~ / rpmbuild zuzugreifen, aber ich bevorzuge
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
Sie haben auch die Wahl, das Präfix festzulegen, damit diese Drehzahl nebeneinander installiert wird, ohne die Drehzahl der Distribution zu unterbrechen (erfordert jedoch eine Namensänderung und einige Änderungen an den internen Paketnamen). Normalerweise füge ich ein Umgebungsmodul hinzu, damit ich diesen gcc nach Bedarf (ähnlich wie Sammlungen funktionieren) als Teil der Drehzahl laden und entladen kann (also füge ich eine neue Abhängigkeit hinzu).
Erstellen Sie schließlich den RPM-Build-Baum und platzieren Sie die Dateien dort, wo sie erstellt werden sollen:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
UPDATE 2
Normalerweise sollte man kein "Server" -OS für die Entwicklung verwenden - deshalb haben Sie Fedora, das bereits mit dem neuesten gcc geliefert wird. Ich habe einige spezielle Anforderungen, aber Sie sollten wirklich in Betracht ziehen, das richtige Tool für die Aufgabe zu verwenden - rhel / centos, um Produktions-Apps auszuführen, fedora, um diese Apps zu entwickeln usw.