从PPA下载了g ++ 4.8,但无法将其设置为默认值吗?


15

我已经通过以下方法在Ubuntu 12.10上下载了g ++ 4.8:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8

但是当我这样做时:

sudo update-alternatives --config g++

切换g ++版本,它说:

update-alternatives: error: no alternatives for g++.

但是,如果我这样做:

g++ --version

它说:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

如何将我的g ++ 4.8安装设置为默认g ++?

Answers:


11

首先,您必须发现所有工具的4.8二进制文件在哪里:

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

因此,我们拥有所有二进制文件,现在让我们看看是否有一些符号链接可用于此类二进制文件:

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

正如我们所看到的,只是cppg++gcc有符号链接。我们在这里有两个选择。

符号链接

我们用我们的替换符号链接,首先删除实际值:

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

然后创建我们的

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

要将其还原,请使用相同的命令,但应使用4.7或4.6

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++

当我这样做时:ls -l gcc * cpp g ++它返回:ls:无法访问gcc *:没有这样的文件或目录ls:无法访问cpp:没有这样的文件或目录ls:无法访问g ++:没有这样的文件或目录
user997112

无需道歉:)一旦我调用remove函数,它就起作用了,但是当我创建“我们的”符号链接时,它说:sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln:失败创建符号链接`/usr/bin/cpp-4.8':文件存在
user997112 2013年

(我两次调用rm命令,以便在第二次确认/抱怨现有链接实际上已删除时调用rm命令)
user997112 2013年

3
这是一个可怕的主意。有许多程序gcc用于编译内核模块,其中某些程序(例如Nvidia)在gcc调用时将不会崩溃,而它们调用的程序将不是内核编译时使用的程序。
nbubis

1
@nbubis很好,问题是“如何将我的g ++ 4.8安装设置为默认g ++?”,因此,应该假定执行此操作的人知道他们在做什么,不是吗?另一方面,您可以提出什么替代方案?
Braiam 2015年

16

您需要update-alternatives知道您有2个C ++编译器,为每个编译器创建一条记录,然后配置要使用的编译器。这是通过以下操作完成的:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

从现在开始,切换编译器所需的唯一命令是以下命令:

sudo update-alternatives --config g++

请参阅man update-alternatives以获取更多信息。

资料来源:如何使用多个gcc实例?


@Braiam对于任何软件包,都可以用相同的方式完成。
RaduRădeanu13年

3
有人可以详细介绍60和40吗?我已经在很多地方看到了这一点
user997112

@ user997112我建议您读这个人,但是,如果您喜欢70和30,那么请使用70和30 ...
RaduRădeanu13年

1
@ user997112这些是优先级编号,仅在使用--auto时才相关。您可以使用update-alternatives --display editor
Braiam

2
在12.04,我得到:更新替代:错误:替代g ++不能成为主服务器:它是gcc的从机
rickfoosusa 2015年

9

这是对如何创建和管理主从(gcc和g ++)替代方案的详细说明和分步说明。

很快,这是

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc

欢迎来到Ask Ubuntu!尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Stormvirux

你是对的。我添加了必要的部分
Anton K

1
用那个奴隶的东西拯救了我的一天。tx
Lennart Rolland
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.