我有一个 RHEL 6 服务器,gcc 版本为 4.4.7。我想更新gcc版本(我认为当前的是4.8)。百胜更新不起作用。还,SO 在 CentOS 上回答类似问题不起作用。我按照接受的答案中的方法进行操作,输出是“获取用于testing-1.1-devtools-6的存储库数据时出错,未找到存储库”。我也不确定是否应该遵循 CentOs 的方法。
有人在 RHEL 6 x86_64 服务器中更新过 gcc 吗?
答案1
迄今为止最简单的方法是使用通过 YUM 存储库提供的二进制构建。 其中一种选择是使用跳5.in存储库。具体这个页面:gcc - 各种编译器(C、C++、Objective-C、Java...)。他们提供了 4.8.2,它应该与 CentOS 6.3 或 6.4 一起使用。您可能想提前进行更新:
$ sudo yum update
另一种选择是利用开发者工具集,特别是 Scientific Linux 提供的捆绑版本。
继安装说明您基本上将执行以下 2 个步骤:
添加存储库$ sudo wget -O /etc/yum.repos.d/slc6-devtoolset.repo \
http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo
$ wget -O /etc/yum.repos.d/slc5-devtoolset.repo \
http://linuxsoft.cern.ch/cern/devtoolset/slc5-devtoolset.repo
安装开发工具集
$ sudo yum install devtoolset-2
更新 #1
YUM 存储库中的 hop5. 似乎已被删除,因此唯一的办法是使用上面突出显示的 devtoolset 方法。
通过 devtoolset 安装的其他示例在此 GitHub Gist 中突出显示:在 CentOS 6 上安装 gcc 4.8 和 Linuxbrew。
答案2
红帽软件集合GCC 4.9 附带您可以考虑启用该通道。
答案3
我现在已经为 rhel6 构建了多个版本的较新 gcc 版本(从 4.7.x 到 5.3.1)。
感谢 Redhat 的 Jakub Jelinek,这个过程相当简单Fedora gcc 构建在 koji 上找到
只需获取您需要的任何版本的最新 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 为您的发行版提供的软件包都需要从以下位置下载曲,并递归地重复该过程,直到满足所有依赖关系要求。
我作弊,顺便说一句。
我通常使用 gnu 工具重新打包 rpm 以包含正确的构建树,以使用正确放置和命名的需求,因此 gmp/mpc/mpfr/isl(不再需要 cloog)被下载并解压缩到正确的路径中,并且新的(臃肿的)tar 被重建为新的 src rpm(对规范文件进行了微小的更改),不依赖于它们的打包 (rpm) 版本。由于我知道没有人使用 ADA,所以我只是从规范文件中删除了与 gnat 相关的部分,进一步简化了构建过程,让我只需要担心 binutils。
Gcc 实际上可以使用较旧的 binutils 进行构建,因此如果您很着急,请进一步编辑 spec 文件以要求系统上已有 binutils 版本。这将导致 gcc 稍微受损,但大多数情况下它会表现得足够好。
这在大多数情况下效果很好。
更新1
打开 src rpm 最简单的方法可能是 yum install 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
通常,不应使用“服务器”操作系统进行开发 - 这就是为什么您拥有已经附带最新 gcc 的 fedora。我有一些特殊的要求,但您确实应该考虑使用正确的工具来完成任务 - rhel/centos 来运行生产应用程序,fedora 来开发这些应用程序等。
答案4
您可以尝试 gcc source buid。GCC 需要 MPC、MPFR 和 GMP 作为先决条件。对于 GCC 4.8,版本依赖项是 MPC 0.8 GMP 6.0 MPFR 2.4.2。下载源包,并将所有包安装在 /usr/lib 下.安装顺序为gmp,mpfr,mpc