如何在CentOS 7的Docker (centos:7)中安装gcc/g++ 9

8
为了使用C++17中的<filesystem>头文件,我需要在我的Centos 7 Docker中安装gcc-9软件包。
默认情况下,centos:7会从常规发行版存储库安装gcc 4.8.5。
docker run --rm -it centos:7
# yum install -y gcc
# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)

有没有一种简单的方法可以安装 gcc-9 (或更高版本) 的包(不能通过源代码构建)?
谢谢!
注意:需要 gcc-9 才能有良好的 C++17 <filesystem> 支持。 GCC 9 发布说明:
使用 <filesystem> 中的类型和函数现在不需要连接 -lstdc++fs 了。
来源: https://gcc.gnu.org/gcc-9/changes.html
3个回答

22

目前为止我所拥有的内容:

cat Dockerfile

FROM centos:7 AS env

RUN yum update -y
RUN yum install -y centos-release-scl
RUN yum install -y devtoolset-9

RUN echo "source /opt/rh/devtoolset-9/enable" >> /etc/bashrc
SHELL ["/bin/bash", "--login", "-c"]
RUN gcc --version

因此,您需要:

  1. 在bashrc中添加源代码
    注意:在Centos上是/etc/bashrc,而在ubuntu上是/etc/bash.bashrc

  2. 将docker默认 shell 更新为 bash,并使用 --login来“加载”bashrc。

docker build .
Sending build context to Docker daemon  4.096kB
Step 1/32 : FROM centos:7 AS env
 ---> 8652b9f0cb4c
Step 2/32 : RUN yum update -y
 ---> Using cache
 ---> a2bb269cd8dc
Step 3/32 : RUN yum install -y centos-release-scl
 ---> Using cache
 ---> 1184e26c71cf
Step 4/32 : RUN yum install -y devtoolset-9
 ---> Using cache
 ---> e678665d2a4e
Step 5/32 : RUN echo "source /opt/rh/devtoolset-9/enable" >> /etc/bashrc
 ---> Using cache
 ---> fe1745d4ca87
Step 6/32 : SHELL ["/bin/bash", "--login", "-c"]
 ---> Running in 2dd7955f4487
Removing intermediate container 2dd7955f4487
 ---> 3cf4835bf680
Step 7/32 : RUN gcc --version
 ---> Running in b5de3266d607
gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 ...

不起作用的方法

测试1

RUN scl enable devtoolset-9 bash
RUN gcc --version | head -1

每个RUN都是一个新的shell,所以子bash在第二行丢失。

测试2

RUN source /opt/rh/devtoolset-9/enable && gcc --version | head -1
RUN gcc --version | head -1

这里再次提到的源仅适用于第一个RUN shell命令,但会丢失...

测试3

这可能有效,但存在潜在的意外行为。

ENV PATH=/opt/rh/devtoolset-9/root/bin:$PATH
RUN gcc --version | head -1

在这里我们只是“修复”PATH变量,但是如果您查看/opt/rh/devtoolset-9/enable脚本,还有更多需要做的事情,不仅仅是更新PATH...


0
如果有帮助的话,您可以尝试以下步骤: 从http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/下载最新的软件包。
wget http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz

请按照以下步骤提取文件:

tar -xzvf gcc-9.20.tar.gz
cd gcc-9.2.0

使用以下内容构建配置:

./configure

使用 make 编译安装,然后执行 make install。

make 
make install 

0

您的回答可以通过添加更多支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认您的答案是否正确。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接