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

use*_*112 15 gcc g++ software-installation

我通过执行以下操作在 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
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时:

sudo update-alternatives --config g++
Run Code Online (Sandbox Code Playgroud)

要切换 g++ 版本,它说:

update-alternatives: error: no alternatives for g++.
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

g++ --version
Run Code Online (Sandbox Code Playgroud)

它说:

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.
Run Code Online (Sandbox Code Playgroud)

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

Rad*_*anu 18

你需要让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++ 
Run Code Online (Sandbox Code Playgroud)

从现在开始,切换编译器时唯一需要的就是这个命令:

sudo update-alternatives --config g++
Run Code Online (Sandbox Code Playgroud)

查看man update-alternatives更多信息。

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

  • 有人可以详细说明60和40吗?我在很多地方见过这个 (3认同)
  • 在 12.04 我得到:update-alternatives: 错误:alternative g++ can't be master: it is a slave of gcc (2认同)

Bra*_*iam 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
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

符号链接

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

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
Run Code Online (Sandbox Code Playgroud)

然后创建我们的

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++
Run Code Online (Sandbox Code Playgroud)

要恢复它,请使用相同的命令,但使用 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++
Run Code Online (Sandbox Code Playgroud)

  • **这是一个糟糕的主意**。有许多程序使用 `gcc` 来编译内核模块,其中一些(例如 Nvidia)会在它们调用的 `gcc` 不是编译内核的那个时默默地崩溃。 (3认同)

Ant*_*n K 10

这是如何创建和管理主从(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
Run Code Online (Sandbox Code Playgroud)