4.7.x부터 5.3.1 이후로 여러 버전의 rhel6 용 최신 gcc 버전을 만들었습니다.
Redhat의 Jakub Jelinek fedora gcc 빌드 덕분에 프로세스가 매우 쉽습니다.
필요한 버전 (예 : 5.3.1 )에 대한 최신 src rpm을 가져 오십시오 .
기본적으로 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
이제 지루한 부분이 있습니다-배포판을 koji 에서 다운로드 해야하는 yum보다 yum보다 높은 버전의 패키지는 모든 종속성 요구 사항이 충족 될 때까지 프로세스를 반복적으로 반복합니다.
나는 속임수를 쓴다.
나는 일반적으로 gnu 기능을 사용하여 올바르게 배치하고 명명 된 요구 사항을 사용하여 올바른 빌드 트리를 포함하도록 rpm을 다시 패키지하여 gmp / mpc / mpfr / isl (cloog가 더 이상 필요하지 않음)을 다운로드하여 올바른 경로로 가져옵니다. (부풀린) tar는 패키지 (rpm) 버전에 의존하지 않고 새로운 src rpm (사양 파일을 약간 변경 함)으로 다시 빌드됩니다. ADA를 사용하는 사람이 아무도 없기 때문에 specfile에서 gnat과 관련된 부분을 제거하고 빌드 프로세스를 단순화하여 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이 distro rpm을 깨지 않고 나란히 설치되도록 접두어를 선택할 수도 있습니다 (그러나 이름을 변경하고 내부 패키지 이름을 일부 수정해야 함). 필자는 일반적으로 환경 모듈을 추가하여 rpm의 일부로 필요한 (컬렉션 작동 방식과 유사하게)이 gcc를로드하고 언로드 할 수 있습니다 (따라서 새로운 종속성을 추가합니다).
마지막으로 rpmbuild 트리를 생성하고 파일을 빌드하고 빌드해야하는 곳에 배치합니다 :
yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec
업데이트 2
일반적으로 개발에 "서버"운영 체제를 사용해서는 안됩니다. 따라서 최신 gcc와 함께 제공되는 페도라를 사용하는 것입니다. 특정 요구 사항이 있지만 프로덕션 응용 프로그램을 실행하기 위해 rhel / centos, 해당 응용 프로그램을 개발하기 위해 fedora 등 작업에 적합한 도구 사용을 고려해야합니다.