我的项目需要一个更新的 G++,但所有教程都会告诉您下载源代码、编译它们并“简单地”安装它们然后使用它。这是我不想要的,因为它的重现性不太好。
然而,Debian 的存储库中确实有更新的软件包(bullseye、testing、unstable 等),我可以保留和共享这些软件包。我知道这样做几乎会让我得到一个 FrankenDebian,但它比使用源代码或任何可疑的存储库要好得多(一些教程甚至建议 Debian 使用 ppa...)。
我还想保留 Debian buster 的 G++,因为很多东西肯定会使用它并且避免此类错误:
/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.30' not found (required by /lib/x86_64-linux-gnu/libselinux.so.1)
error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
肯定会避免这里出现一些令人头痛的问题。
我还听说过设置替代方案等,但我需要首先安装正确的软件包。
这是我的问题:如何在 Debian buster 上安装另一个 G++,而不需要按照源代码的方式安装?
答案1
目前这是可能的(并且毫无疑问将保持如此,因为 Debian 11 在发布之前被冻结),只要您只需要gcc
(而不是g++
)。例如,您需要将 Buster 向后移植和 Bullseye 添加到源中,并适当配置固定
Package: *
Pin: release n=buster
Pin-Priority: 500
Package: *
Pin: release n=buster-updates
Pin-Priority: 500
Package: *
Pin: release n=buster-backports
Pin-Priority: 110
Package: *
Pin: release n=bullseye
Pin-Priority: 100
然后您就可以安装gcc-10
,这不需要对libc6
或进行任何升级libstdc++6
。apt
在解决依赖关系时遇到困难,但aptitude
管理得很好,并且它们被包含在内(我的测试中有 22 个升级包,其中大多数是 GCC 或 binutils 包)。
g++-10
是一个不同的故事;它需要更新libstdc++6
,并且升级本质上涉及升级到测试。
正如你所说,尽管如此会结果是“FrankenDebian”,因此您可能需要考虑设置 Debian 测试schroot
或使用debian:11
容器。