Miz*_*zux 8 gcc docker centos7
为了使用 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)
Run Code Online (Sandbox Code Playgroud)
有没有办法轻松安装 gcc-9(或更高版本)包(即不从源代码构建它)
谢谢 !
注意:需要 gcc-9 才能有良好的 C++17<filesystem>支持。
GCC 9 发行说明:
使用 中的类型和函数
<filesystem>不需要与-lstdc++fsnow 链接。
源代码: https: //gcc.gnu.org/gcc-9/changes.html
Miz*_*zux 22
到目前为止我所拥有的:
猫 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
Run Code Online (Sandbox Code Playgroud)
所以你必须:
在 bashrc 注释中添加源代码
:在 Centos 上是/etc/bashrc,在 ubuntu 上是/etc/bash.bashrc
将 docker 默认 shell 更新为 bash 并使用“加载”bashrc--login
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
Run Code Online (Sandbox Code Playgroud)
RUN scl enable devtoolset-9 bash
RUN gcc --version | head -1
Run Code Online (Sandbox Code Playgroud)
每个RUN都是一个新的 shell,因此子 bash 在第二行中丢失。
RUN source /opt/rh/devtoolset-9/enable && gcc --version | head -1
RUN gcc --version | head -1
Run Code Online (Sandbox Code Playgroud)
这里的源代码仅适用于第一个 RUN shell 命令,但会丢失......
这可能有效,但可能会出现意外行为
ENV PATH=/opt/rh/devtoolset-9/root/bin:$PATH
RUN gcc --version | head -1
Run Code Online (Sandbox Code Playgroud)
这里我们只“修复”PATH变量,但是如果你看一下/opt/rh/devtoolset-9/enable脚本,你会发现除了更新变量之外还有更多的事情要做PATH。
| 归档时间: |
|
| 查看次数: |
23415 次 |
| 最近记录: |