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 ++​​に設定するにはどうすればよいですか?

回答:


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シンボリックリンクがあります。ここには2つのオプションがあります。

シンボリックリンク

シンボリックリンクを私たちのものに置き換え、最初に実績を削除します:

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:そのようなファイルまたはディレクトリなしls:g ++にアクセスできません:そのようなファイルまたはディレクトリなし
user997112

謝罪は必要ありません:) remove関数を呼び出すと動作しますが、「私たち」のシンボリックリンクを作成しようとすると、sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln:failedシンボリックリンク`/usr/bin/cpp-4.8'を作成するには:ファイルが存在する
user997112

(私はrmコマンドを2回呼び出したので、2回目に、既存のリンクが実際に削除されたことを確認/苦情しました)
-user997112

3
これはひどい考えです。gccカーネルモジュールのコンパイルに使用する多くのプログラムがあり、それらの一部(Nvidiaなど)はgcc、呼び出しがカーネルのコンパイルに使用されない場合にサイレントクラッシュします。
-nbubis

1
@nbubisよく、質問は「g ++ 4.8のインストールをデフォルトのg ++​​に設定するにはどうすればよいですか」ということです。一方、どのような代替案を提案できますか?
Braiam

16

あなたはできるようにする必要があるupdate-alternatives、あなたは2 C ++コンパイラを持っていることを知るために、各1のレコードを作成し、使用したい1に設定します。これは、次を使用して行われます。

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どのパッケージでも同じように実行できます。
ラドゥラディアナヌ

3
誰かが60と40について詳しく説明できますか?多くの場所でこれを見た
user997112

あなたはより多くの70と30のような場合@ user997112私は...その後、70と30を使用して、あなたは男を読むことをお勧め、しかし
ラドゥRădeanu

1
@ user997112これらは優先順位番号であり、-autoを使用する場合にのみ関連します。を使用していくつかの例を見ることができますupdate-alternatives --display editor
Braiam

2
12.04に私は得ます:update-alternatives:エラー:代替g ++はマスターになれません:それはgccのスレーブです
-rickfoosusa

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 14年

あなたが正しい。重要な部分を追加しました
アントンK

1
その奴隷のもので私の一日を救った。tx
レナート・ローランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.