如何在 CentOS 7 docker (centos:7) 上安装 gcc/g++ 9
How to install gcc/g++ 9 on CentOS 7 docker (centos:7)
为了使用 C++17 include <filesystem>
我需要在我的 centos 7 中安装 gcc-9 包 docker.
默认情况下 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.
我目前拥有的:
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
所以你必须:
在 bashrc
中添加源代码
注意:在 Centos 上是 /etc/bashrc
而在 ubuntu 上是 /etc/bash.bashrc
将 docker 默认 shell 更新为 bash 并使用 --login
[=“加载”bashrc 22=]
输出
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
同样,源代码仅适用于第一个 运行 shell 命令,但将会丢失...
测试 3
这可能有效,但可能会出现意外行为
ENV PATH=/opt/rh/devtoolset-9/root/bin:$PATH
RUN gcc --version | head -1
这里我们只“修复”了 PATH
变量,但是如果您查看 /opt/rh/devtoolset-9/enable
脚本,除了更新 PATH
...
另一种解决方案是将程序作为字符串传递到命令行:
RUN scl enable devtoolset-9 'gcc --version'
另请参阅 an answer 对 GitLab CI 的等效问题。
为了使用 C++17 include <filesystem>
我需要在我的 centos 7 中安装 gcc-9 包 docker.
默认情况下 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.
我目前拥有的:
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
所以你必须:
在 bashrc
中添加源代码 注意:在 Centos 上是/etc/bashrc
而在 ubuntu 上是/etc/bash.bashrc
将 docker 默认 shell 更新为 bash 并使用
--login
[=“加载”bashrc 22=]
输出
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
同样,源代码仅适用于第一个 运行 shell 命令,但将会丢失...
测试 3
这可能有效,但可能会出现意外行为
ENV PATH=/opt/rh/devtoolset-9/root/bin:$PATH
RUN gcc --version | head -1
这里我们只“修复”了 PATH
变量,但是如果您查看 /opt/rh/devtoolset-9/enable
脚本,除了更新 PATH
...
另一种解决方案是将程序作为字符串传递到命令行:
RUN scl enable devtoolset-9 'gcc --version'
另请参阅 an answer 对 GitLab CI 的等效问题。