如何在CentOS 7 docker(CentOS:7)上安装gcc/g++9



为了使用C++17 include<filesystem>,我需要在我的centos 7 docker中使用gcc-9包。

默认情况下,centos:7将从常规发行版repo安装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链接。

src:https://gcc.gnu.org/gcc-9/changes.html

到目前为止我所拥有的:

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 AND;负载";使用--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

每个CCD_ 8都是一个新的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。。。

如果有帮助,您可以尝试使用以下步骤:从下载最新软件包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 
make install 

sudo yum-install-yhttp://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm

sudo yum install-yhttp://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm

sudo yum-install devtoolset-9-gcc-c++

最新更新