如何在Debian Jessie 8.1上安装GCC 5


21

我尝试了许多解决方案在debian服务器上为我的gcc编译器安装更新。他们都没有工作。我需要编译器更新才能使用c ++ 11的新功能,因为它提供了稳定的libcxx11 ABI和对C ++ 11的稳定支持(请参阅此处)。具体是获取版本“ GLIBCXX_3.4.21”,该版本未包含在我当前的编译器gcc版本4.9.2(Debian 4.9.2-10)中。

一些指向解决方案的指示将有所帮助。提前致谢。

我尝试过的与我的问题相关的论坛链接:

1 2 3(不是完全相关的解决方案适用于ubuntu,但我在debian的ftp服务器上找不到gcc-5)


如您所见,这在Debian / testing中提供,涉及对运行时库的更改。有人可能会建议您以Debian软件包的方式进行此操作,但由于受影响的软件包数量众多,因此其效果与切换到测试配置几乎没有什么不同。
Thomas Dickey

您为什么特别需要新的ABI支持?您可以使用Debian 8的gcc 4.9.2来构建大多数C ++ 11代码,只需要在Debian 9发布时重新编译它即可。如果您迫不及待,最简单的解决方案是切换到testing,但这在服务器上可能不是一个好主意(当然,这取决于服务器的含义)。从gcc 4.9到gcc 5的转换涉及到库转换,因此,如果您自己尝试这样做,您将痛苦不堪!
史蒂芬·基特

我同意托马斯和斯蒂芬的话,除了我对在服务器上使用测试的想法不那么担心。并非所有服务器都需要二进制文件和库的长期相同性(这在debian上下文中是“稳定”的意思),对于某些跟踪测试甚至不稳定的服务器更有用(例如,需要先进的功能,或者仅仅是以保持脚本小子的领先地位)。但是,在生产服务器上运行测试/不稳定的程序绝对需要很多有关Debian的技能和知识来解决偶发的损坏。首先在其他计算机或VM上测试升级。
cas

@cas我不是在考虑二进制文件的稳定性,而是testing(单独使用)两个主要缺点:有时会暂时删除软件包(因此,您刚刚在测试VM中验证过的设置可能不再容易使用) ,并且安全修复程序可能会延迟(如果testing正在进行大型的库转换,有时会花很长时间,尽管在testing-security这种情况下是这样)。
史蒂芬·基特

1
如果您在Debian系统上重新编译程序(而不是将其复制过来),它应该可以正常工作。
史蒂芬·基特

Answers:


13

我需要在debian jessie上安装GCC 5+,并且可以在Debian测试中使用(至少在Jun-16上可用),您可以使用apt-pinning安装那里可用的软件包(请参阅https://wiki.debian.org/AptPreferences) 。

要使用apt-pinning在Debian jessie上测试安装GCC 5+:

  1. 通过在/etc/apt/sources.list.d包含以下行的目录中创建一个文件,将debian测试仓库添加到您的apt源中

    deb http://ftp.us.debian.org/debian testing main contrib non-free

  2. 通过创建/etc/apt/preferences.d包含以下内容的文件,指示debian在某些软件包上使用测试源:

    Package: *
    Pin: release a=testing
    Pin-Priority: 100
    
  3. 更新apt数据库: sudo apt-get update

  4. 通过测试安装gcc: sudo apt-get install -t testing gcc

    请注意,使用-t testing告诉apt-get从测试源安装gcc,如先前配置。

我强烈建议在再次编译源代码之前先清除所有编译并重新编译任何依赖项。

玩得开心!


1
我从没有尝试过(也不想尝试),但是您的过程很有趣。没有多少软件套件像GCC那样紧密地与整个Debian系统紧密地结合在一起。您的程序真的有效吗?还是引起了更多无法解决的问题?好奇。
thb 2013年

1
我实际上尝试了一下,并获得了不错的结果:我可以成功编译自己正在构建的文件,并且系统可以继续正常运行。尽管如此,您可能是对的:更改GCC版本可能会破坏其他软件包的编译(例如,使用来安装软件包时编译源代码pip) ,但我认为此过程的侵入性最低,因为apt它将跟踪哪些软件包取决于GCC并根据需要安装兼容版本(据我所记得)。
llekn

2
步骤2的注释:/etc/apt/preferences.d/中的文件不应包含点“。”。在文件名中,或以“ .pref”结尾。否则,将忽略此文件。对于值100的含义及其选择原因的解释将不胜感激。
路德维希·舒尔茨

据我了解,Pin-Priority软件包获得的越多,它相对于编号较低的其他软件包的偏好就越高。因此,就像在Debian的AptPrefences页面中所指出的那样,testing默认情况下将默认安装Pin-Priority: 900所有软件包testing。因此,指定testing将有Pin-Priority: 100下降testing包优先使他们只安装如果在指定目标时要求apt-get install -t testing ...
llekn

1
@ LeeK-B确实,使用Package: gcc会将整个系统升级到测试。关于的文档apt-prefences令人困惑,所以我想这是正在发生的事情:1:由于测试包的版本更高,默认情况下,它们优先于标准包。2:指定包:gcc使用Pin-priority: 100可使所有测试包具有默认优先级(高于标准)除外gcc。恰恰与我们想要的相反。我更新了答案以避免这种错误
llekn

6

要将前面的两个答案组合成一个可行的答案:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
apt-get update
apt-get install -t unstable gcc-5

但!!!从不稳定环境安装软件包时,请您自担风险。/etc/apt/sources.list.d/unstable.list安装软件包后,您可能还需要删除。

如果可能,请在Docker下安装,这样就不会弄乱您的OS。你的旅费可能会改变。


4

自2017年2月19日起,gcc-5 已从测试中删除

https://tracker.debian.org/pkg/gcc-5

你可以apt-get install gcc-5,如果你先执行该行根:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" > /etc/apt/sources.list.d/unstable.list

然后,您可能想/etc/apt/preferences.d根据llekn的答案更改该来源的优先级。


1

上周我遇到了问题。截至2019年1月23日,gcc-5似乎已从存储库中完全删除。(请参阅https://tracker.debian.org/pkg/gcc-5

如果您真的需要它,我想您可以从源代码编译它。我将找到一种从系统中删除依赖项的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.