在Debian上安装gcc 4.8

28

我想开始尝试一些较新的C++11特性,最好的支持是在gcc 4.8上,而Squeeze则使用4.4.5。

然而,我不想对我的当前设置造成任何"损坏"。有什么最好的方法可以同时运行两个版本的gcc?我主要担心的是依赖项数量很大,将它们全部引入到我的当前系统中可能会使其不稳定。

是否有人成功做到了这一点,步骤是什么?

如果失败,我可能只需创建一个虚拟机,在其中运行一个"不稳定"的Debian,但这并不是一个理想的解决方案。

5个回答

34
如果你从源代码安装GCC,请确保不要将其安装到/usr,这样就不会弄乱任何东西。如果你将其安装为自己的用户,而不是root,那么几乎不可能搞砸系统。
请查看http://gcc.gnu.org/wiki/InstallingGCC以获取几乎傻瓜式的最小配置。
我已经按我的用户构建了各种版本,并在~/gcc/4.X中安装了它们,其中X是不同的版本号。
唯一需要注意的是,新版本的共享库不在动态链接器的默认搜索路径中,因此您需要使用LD_LIBRARY_PATH或其他解决方案来确保可执行文件可以找到来自4.8的库,请参见libstdc++ FAQ手册中链接到的页面。
我使用一个包装脚本叫做g++11,它只是调用带有-std=gnu++11标志的新版本GCC,并向链接器传递一个标志,告诉它在可执行文件中设置4.8库的路径。
$HOME/gcc/4.8/bin/g++ -Wl,-rpath,$HOME/gcc/4.8/lib64 -std=gnu++11 -Wall -Wextra -g "$@"

3
我发现包装脚本特别有用。 - Federico Bonelli

16

我曾经遇到过同样的问题,但是不想完全升级到testing版本。

Jessie (testing)现在包含了符合C++11标准的g++-4.8。

我使用了以下方式中的apt-pinning:

将jessie源添加到了/etc/apt/sources.list中:

deb http://ftp.uk.debian.org/debian/ jessie main non-free contrib

/etc/apt/preferences 被编辑为以下内容:

Package: *
Pin: release n=wheezy
Pin-Priority: 900

Package: gcc*
Pin: release n=jessie
Pin-Priority: 910

那么,

$ sudo aptitude update
$ sudo aptitude install gcc/jessie

在这个时候,我选择了第二个提供的选项来完全解决依赖关系。


1
应该是 n=jessie,根据 man apt_preferences,发行版代号是 n=。此外,对于 a 对我来说不起作用。 - Pietro Saccardi
1
这些指令会破坏Debian 7.8.0(wheezy)通过删除现有的gcc 4.7安装,而不安装更新的gcc。无法(或无法)使用“apt-get”尝试重新安装原始的gcc 4.7以恢复到工作状态。 - Alex Reynolds

6
Debian将该软件包命名为gcc-4.8(或C++编译器的g++-4.8)。只要不将其重命名为g++,安装这些软件包不会破坏您的操作系统。该软件包被列为实验性。
有关该软件包的信息在这里

更新:g++-4.8现在在测试中,但更新的软件包在不稳定版中。


如果他愿意,他可以配置系统以查找非稳定的软件包。请参考ServerFault上的这个问题(阅读被接受的答案)。 - JKor
1
当然 - 我知道这一点,因为我自1995年以来一直是Debian开发者/维护者。但这并不适合胆小的人,因为稳定版和测试版/不稳定版之间的差距可能会很大。使用测试版作为基础要容易得多,我已经这样做了多年。但你的情况可能不同,他的情况也是如此。 - Dirk Eddelbuettel
那其他要被引入的东西呢?例如库文件之类的,它们会和谐共存吗?比如说,gcc4.5会继续使用正确的libc吗(这个有关系吗)? - paxdiablo
一切都应该很好地共存。所有的软件包都加上了后缀“-4.8”,以防止任何冲突。 - JKor
Jessie g++-4.8虽然不稳定,但对我来说像魔法一样运行良好,没有任何冲突! - Mohammed Sufian

2

简短回答:

  1. 升级到testing版本,它非常稳定并且提供了多个并发gcc版本。Ubuntu也是类似的,在12.10版本中我可以同时使用gcc/g++ 4.4、4.5、4.6和4.7。

  2. 尝试Debian后备存档,可能有gcc 4.8的端口。

  3. 使用虚拟化:我更喜欢基于内核的libvirt / kvm,因为它在Linux上非常轻量级。我的amd64服务器有另外两个32位安装版本,正是出于这个原因。

  4. 不是一个SO问题...


6
根据常见问题解答中的说法:"程序员常用的软件工具"。如果gcc不符合这个描述,那我就吃帽子 :-) - paxdiablo
3
SO是面向编程的,我见过版主把很多类似的问题转移到了超级用户。个人而言,我喜欢这里的问题,并认为SE网站变得太细致了。只是说我更或多或少地期望这个问题会被关闭/移动。 - Dirk Eddelbuettel

1

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