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

问题描述 投票:0回答:4

为了使用 C++17 include

<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
链接。

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

docker gcc centos7
4个回答
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
投票
RUN yum -y install centos-release-scl \
    && yum -y install devtoolset-9
RUN source scl_source enable devtoolset-9

最后一个命令行对我有用,而不是

RUN scl enable devtoolset-9 bash

© www.soinside.com 2019 - 2024. All rights reserved.