Zbudowałem nowsze wersje gcc dla rhel6 dla kilku wersji teraz (od 4.7.x do 5.3.1).
Proces ten jest dość łatwy dzięki kompilacjom gcc Jakuba Jelinka z Redhat znalezionym na koji
Po prostu pobierz najnowsze src rpm dla dowolnej wersji, której potrzebujesz (np. 5.3.1 ).
Zasadniczo zaczynasz od określenia wymagań kompilacji poprzez wydanie rpm -qpR src.rpm
szukania dowolnych wymagań wersji:
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
Teraz pojawia się żmudna część - każdy pakiet, który ma wersję wyższą niż dostarczona przez yum z twojej dystrybucji, należy pobrać z koji i powtarzać proces rekurencyjnie, aż zostaną spełnione wszystkie wymagania dotyczące zależności.
Oszukuję, btw.
Zwykle przepakowuję rpm, aby zawierał prawidłowe drzewo kompilacji za pomocą narzędzia GNU, aby użyć poprawnie umieszczonych i nazwanych wymagań, więc gmp / mpc / mpfr / isl (cloog nie jest już wymagany) są pobierane i odkładane na właściwą ścieżkę, a nowa (wzdęty) tar jest przebudowywany na nowy src rpm (z niewielkimi zmianami w pliku spec) bez zależności od ich wersji pakietowej (rpm). Ponieważ nie znam nikogo, kto używa ADA, po prostu usuwam fragmenty dotyczące komara z pliku specyfikacji, co dodatkowo upraszcza proces kompilacji, pozostawiając mi tylko binutils, o które trzeba się martwić.
Gcc może budować ze starszymi binutils, więc jeśli się spieszysz, dokonaj dalszej edycji pliku specyfikacji, aby wymagać wersji binutils, która jest już obecna w twoim systemie. Spowoduje to nieco kaleką gcc, ale w większości będzie działać wystarczająco dobrze.
Działa to całkiem dobrze głównie.
AKTUALIZACJA 1
Najprostszym sposobem na otwarcie src rpm jest prawdopodobnie yum, zainstaluj rpm i uzyskaj dostęp do wszystkiego pod ~ / rpmbuild, ale wolę
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
Masz również możliwość ustawienia prefiksu, aby ta rpm zainstalowała się obok siebie bez przerywania rpm dystrybucji (ale wymaga zmiany nazwy i pewnych modyfikacji wewnętrznych nazw pakietów). Zazwyczaj dodaję moduł środowiska, aby w razie potrzeby ładować i zwalniać ten gcc (podobnie jak działają kolekcje) jako część rpm (więc dodam nową zależność).
Na koniec utwórz drzewo rpmbuild i umieść pliki tam, gdzie powinien iść, i skompiluj:
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
AKTUALIZACJA 2
Zwykle nie powinno się używać systemu „serwerowego” do programowania - dlatego masz Fedorę, która jest już dostarczana z najnowszym gcc. Mam pewne szczególne wymagania, ale naprawdę powinieneś rozważyć użycie odpowiedniego narzędzia do zadania - rhel / centos do uruchamiania aplikacji produkcyjnych, fedora do tworzenia tych aplikacji itp.