如何在最新版Debian Docker上安装gcc-9

8
为了使用C++17的<filesystem>,我需要在我的debian docker中安装gcc-9软件包。默认情况下,debian:latest(也称为10或buster)将从常规发行版存储库安装gcc 8.3.0
是否有任何PPA、测试库或其他地方可以“轻松”安装gcc-9(或更高版本)软件包(即不是从源代码编译)?
谢谢!注意:需要gcc-9以获得良好的C++17 <filesystem>支持。GCC 9发行说明:

现在,使用 中的类型和函数不需要与-lstdc++fs链接。

来源:https://gcc.gnu.org/gcc-9/changes.html 备注2:据我所知,CMake 3.16*不支持任何cxx_filesystem编译器功能。
备注3:您可以在此处找到日志:https://github.com/Mizux/KalistoUnpacker/runs/642516660?check_suite_focus=true
2个回答

9

从一个干净的 debian:10 开始:

echo 'deb http://deb.debian.org/debian testing main' > /etc/apt/sources.list.d/testing.list
apt update
cat <<EOF > /etc/apt/preferences.d/pin
Package: *
Pin: release a=stable
Pin-Priority: 700

Package: *
Pin: release a=testing
Pin-Priority: 650
EOF

apt install -qq -y -t testing build-essential

产生:

# g++ -v
gcc version 9.3.0 (Debian 9.3.0-11) 

如果我的回答违反了固定规则或其他规定,导致被踩,我很愿意接受教育。 - Botje
我也想知道为什么有人会踩这个! - Mizux
@Botje 这个过程可以从Buster升级到Bullseye吗?我在应用了你的更改后执行了apt upgrade,从升级的软件包数量来看,现在看起来像是我已经在使用Bullseye了...内核也更新到了5.x版本。顺便说一句:现在你可以从测试中获取GCC 10.2.0,它们似乎已经从9.3.0升级了。 - cesss
@Botje 看起来在创建 pin 文件之前我已经升级了所有的软件包,所以我实际上已经升级到了 Bullseye... 我对 Bullseye 没有意见,但现在的问题是每当我想安装某些东西时,我需要执行 apt install -t testing 命令,否则它将拒绝安装... 现在我该如何避免需要 -t testing 参数呢? - cesss

7

在我的Dockerfile中,我执行了以下操作:

FROM debian:latest AS env
...
RUN echo 'deb http://deb.debian.org/debian testing main' >> /etc/apt/sources.list
RUN apt update -y
RUN apt install -y gcc

注意:在安装build-essential后,我添加了这些行,因此容器从技术上讲安装了“默认”gcc版本,然后通过测试仓库更新为新版本...

注意2:使用RUN gcc --version命令,我获得了 gcc (Debian 9.3.0-11) 9.3.0 的输出结果:D


我也想这样做,但我不知道什么是Dockerfile以及在哪里找到它。你能解释一下吗? - C. Binair
Dockerfile 是用于“描述”容器镜像配方的格式。 - Mizux
1
我不得不使用 DEBIAN_FRONTEND=noninteractive apt install -y gcc 命令来跳过gcc的提示。 - Ana Franco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接