gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:15:48 30 4
gpt4 key购买 nike

为了使用 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 发行说明:

Using the types and functions in <filesystem> does not require linking with -lstdc++fs now.


源代码: https://gcc.gnu.org/gcc-9/changes.html

最佳答案

到目前为止我所拥有的:
猫 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
所以你必须:
  • 在 bashrc 中添加源代码
    注意:在 Centos 上是 /etc/bashrc在 ubuntu 上是 /etc/bash.bashrc
  • 将 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,所以 sub-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 ...

    关于docker - 如何在 CentOS 7 docker 上安装 gcc/g++ 9 (centos :7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67090507/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com