在rhel 6 x86_64上安装最新的gcc


13

我有一个gcc版本4.4.7的RHEL 6服务器。我想更新gcc版本(我认为当前版本是4.8)。百胜更新不起作用。同样,在CentOS针对类似问题的SO答案也不起作用。我按照接受的答案中的方法进行操作,输出为“在获取用于testing-1.1-devtools-6的存储库数据时出错,未找到存储库”。另外,我不确定是否应遵循CentO的方法。

是否有人在RHEL 6 x86_64服务器中更新了gcc?


您是否尝试从此存储库安装它?hop5.in/yum/el6/repoview/gcc.html。这些是4.8.2的二进制版本。您可能需要在6.4 CentOS上安装它们,这可能是您的问题。
slm

是否可以选择从源代码安装?
mkc

是的,如果需要,我可以从源代码安装。
rivu 2014年

好问题。谁是拒绝投票的人?:(
奥索斯

显然,hop5.in不再是任何东西的有效el6回购。@slm
Otheus

Answers:


4

到目前为止,最简单的方法是利用通过YUM存储库提供的二进制版本。 一种这样的选择是使用hop5.in存储库。特别是此页面:gcc-各种编译器(C,C ++,Objective-C,Java等)。他们提供的4.8.2应该可以与CentOS 6.3或6.4一起使用。您可能需要事先进行更新:

$ sudo yum update

另一个选择是利用Developer Toolset,特别是Scientific Linux提供的捆绑版本。

按照安装说明,您基本上将执行以下两个步骤:

添加存储库
$ 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
安装devtoolset
$ sudo yum install devtoolset-2

更新#1

YUM存储库中的hop5.in似乎已被删除,因此唯一的办法就是利用上面突出显示的devtoolset方法。

该GitHub Gist中突出显示了通过devtoolset安装的其他示例:在CentOS 6上安装gcc 4.8和Linuxbrew


3
我试图安装从第一个链接下载的rpm,说“错误:依赖项失败:gcc-4.8.2-8.el6.x86_64需要cpp = 4.8.2-8.el6 ...”。对于开发者工具包,它说:“ people.centos.org/tru/devtools-1.1/6Server/x86_64/RPMS/repodata/...:[错误14] PYCURL ERROR 22 - ”请求的URL返回错误:404未找到“。我认为问题是链接中的6Server而不是6。我不知道该如何解决
rivu 2014年

hop.in不再具有我认为您认为的东西。
奥修斯'16

1
可能需要执行其他步骤:从下载并导入CERN密钥http://ftp.scientificlinux.org/linux/scientific/5x/x86_64/RPM-GPG-KEYs/RPM-GPG-KEY-cern。我喜欢该网站没有https。去scilinux的方式。你下载它(tmp目录或whever)后,与导入rpm --import RPM-GPG-KEY-cern然后yum install.
Otheus

@Otheus-谢谢,我讨厌当回购物像这样咬灰尘时,破坏了网上的一大堆内容8-)。
slm

1
值得一提的是devtoolset-2-gcc(至少对我而言)安装了12个软件包和35 MB下载,而280个软件包和575 MB下载yum install devtoolset-2
miken32 '19


2

我已经为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提供的软件包都需要从koji下载,然后递归地重复该过程,直到满足所有依赖关系要求为止。

我作弊,顺便说一句。
我通常使用gnu工具将rpm重新包装为包含正确的构建树,以使用正确放置和命名的需求,因此将gmp / mpc / mpfr / isl(不再需要cloog)下载并安装到正确的路径中, (膨胀的)tar被重建为新的src rpm(对spec文件进行了少量更改),而与它们的打包(rpm)版本无关。由于我不知道有人在使用ADA,因此我只是从specfile中删除了与gnat有关的部分,从而进一步简化了构建过程,使我只剩下binutils了。
Gcc实际上可以使用较旧的binutils进行构建,因此,如果您急忙,请进一步编辑specfile以要求系统中已经存在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(但需要更改名称,并对内部软件包名称进行一些修改)。我通常会添加一个环境模块,以便我可以根据需要作为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附带的fedora的原因。我有一些特殊要求,但是您应该真正考虑使用适合该任务的工具-rhel / centos运行生产应用程序,fedora开发这些应用程序等。


拒绝给出理由时要客气。
Dani_l

0

大家好,这就是我所做的(从头开始编译)。我确信它确实可行,但对其他答案并没有冒犯,但是GCC对于安全性尤其重要,因此我更喜欢从原始和官方来源进行编译:

yum -y install gmp-devel mpfr-devel libmpc-devel glibc-devel glibc-devel.i686 zip unzip jar
wget http://mirrors.kernel.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz
tar -zxvf gcc-5.5.0.tar.gz
cd gcc-5.5.0
./configure
make
make install
yum remove gcc
rm -rf /usr/bin/gcc
rm -rf /usr/bin/c++
rm -rf /usr/bin/cc
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc-5.5.0 /usr/bin/gcc
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-c++ /usr/bin/c++
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc /usr/bin/cc

资料来源:http : //realtechtalk.com/GCC_5_on_Centos_6_How_To_Install-1965-articles


安全性很重要,但是您是从非HTTPS位置安装的吗:)?
dhag

当时在mirrors.kernel.org网站上没有启用SSL,但是我认为如果我们不信任kernel.org,就会遇到更大的问题:)。
Areeb Soo Yasir

-1

您可以尝试使用gcc源buid.GCC要求MPC,MPFR和GMP作为先决条件。对于GCC 4.8,版本依赖性为MPC 0.8 GMP 6.0 MPFR 2.4.2。下载源软件包,并将所有软件包安装在/ usr / lib下。安装顺序为gmp,mpfr,mpc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.