web-dev-qa-db-ja.com

UbuntuでデフォルトのGCCコンパイラを変更するにはどうすればよいですか?

すでにgcc/g ++-4.4がインストールされているubuntu 11.04にgcc-3.3/g ++-3.3をインストールしました。したがって、私のシステムではgcc-3.3と4.4の両方が利用可能です。必要に応じて両方のコンパイラを呼び出すことができます。コマンドgccを呼び出すと、gcc-4.4が呼び出されます。 gcc-3.3を呼び出すには、コマンドgcc-3.3を使用する必要があります。

デフォルトのコンパイラをgcc-3.3に変更するにはどうすればよいですか?コマンドgccを実行すると、gcc-4.4ではなくgcc-3.3が呼び出されます。

さらに、makeファイルの変数CXXをgcc-3.3に変更するにはどうすればよいですか?すべてのmakeファイルを変更するのではなく、システム内の1つの共通のグローバルな場所を変更したい.

85
RoboAlex

@Tommyが示唆したように、update-alternativesを使用する必要があります。
ファミリーのすべてのソフトウェアに値を割り当て、アプリケーションが呼び出される順序を定義します。

システム上の同じソフトウェアの異なるバージョンを維持するために使用されます。あなたの場合、gccのいくつかの赤緯を使用することができ、そのうちの1つが好まれます。

Gccの現在の優先順位を把握するには、@ tripleeeのコメントが指すコマンドを入力します。

update-alternatives --query gcc

ここで、gcc-4.4の優先順位に注意してください。これは、gcc-3.3に高い優先順位を与える必要があるためです。
選択肢を設定するには、次のようなものが必要ですgccインストールが/usr/bin/gcc-3.3にあり、gcc-4.4の優先度が50未満であると仮定)

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50

-編集-

最後に、update-alternativesの対話型インターフェイスを使用して、バージョンを簡単に切り替えることもできます。 update-alternatives --config gccと入力して、インストールされているものの中から使用するgccバージョンを選択するよう求められます。

-編集2-

ここで、システム全体のCXX環境変数を修正するには、@ DipSwitchで示される行を.bashrcファイルに配置する必要があります(これはユーザーにのみ変更を適用するため、私の意見ではより安全です)。

echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
101
jopasserat

TL; DRクラウドに対するjHackTheRipperの回答の完全な例を次に示します。 :-)この場合、デフォルト4.6のUbuntuシステムでg ++-4.5を実行したかったのです。 rootとして:

apt-get install g++-4.5
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50
update-alternatives --set g++ /usr/bin/g++-4.5
update-alternatives --set gcc /usr/bin/gcc-4.5
update-alternatives --set cpp-bin /usr/bin/cpp-4.5

ここでは、まだ4.6がデフォルト(別名「自動モード」)ですが、明示的に一時的に4.5に切り替えます(手動モード)。 4.6に戻るには:

update-alternatives --auto g++
update-alternatives --auto gcc
update-alternatives --auto cpp-bin

cppの代わりにcpp-binを使用していることに注意してください。Ubuntuには/lib/cppのマスターリンクを持つcppの代替が既にあります。そのリンクの名前を変更すると、スクリプトが壊れる可能性のある/lib/cppリンクが削除されます。)

66
Trevor Robinson

これは素晴らしい説明です と、マスターおよびスレーブ(gccおよびg ++)の代替を作成および管理する方法を順を追って説明します。

まもなく:

Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7
Sudo update-alternatives --config gcc
19
Anton K

現在、Ubuntu/preciseで利用できるgcc-4.9があります。

ディストリビューションコンパイラの優先度が高いコンパイラの代替グループを作成します。

root$ VER=4.6 ; PRIO=60
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

root$ VER=4.9 ; PRIO=40
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

注: gccバージョンスイッチを使用すると、g ++バージョンが自動的に変更されます。 「cpp」マスターの代替が存在するため、cpp-binは個別に実行する必要があります。

利用可能なコンパイラの代替をリストします。

root$ update-alternatives --list gcc
root$ update-alternatives --list cpp-bin

Gcc、g ++、およびcppのバージョン4.9を手動で選択するには、次のようにします。

root$ update-alternatives --config gcc
root$ update-alternatives --config cpp-bin

コンパイラーのバージョンを確認します。

root$ for i in gcc g++ cpp ; do $i --version ; done

ディストリビューションコンパイラの設定を復元します(ここで:v4.6に戻ります)。

root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin
7
dileks

すべての--slavesで4.​​8から6の間:

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \
                    10 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-4.8 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-4.8 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8

そして

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \
                    15 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-6 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-6 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-6 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-6 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6

update-alternatives --config gccでそれらを変更します。

6
szotsaki

あなたが個人的な目的のためにそれを達成するためのより速い(しかしまだ非常にきれいな)方法が必要な場合(たとえば、コンパイラのバージョンに関するいくつかの強い要件を持つ特定のプロジェクトを構築したい場合)、次の手順に従ってください:

  • echo $PATHと入力し、非常に高い優先順位を持つpersonalディレクトリを探します(私の場合、~/.local/binがあります)。
  • このディレクトリにシンボリックリンクを追加します。

例えば:

ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++

もちろん、これは1人のユーザーで機能しますが(システム全体のソリューションではありません)、一方で、インストール環境であまりにも多くのものを変更するのは好きではありません。

1
Thomas Baruchel

新しいclangコンパイラをインストールしようとしたときにこの問題が見つかりました。 DebianLLVMのメンテナーが同意する 代替システムはalternatives(バージョン管理ではありません。

彼らが提案する解決策は次のようなものです。
PATH=/usr/lib/llvm-3.7/bin:$PATH
/usr/lib/llvm-3.7/binはllvm-3.7パッケージによって作成されたディレクトリで、サフィックスのない名前のすべてのツールが含まれています。それにより、llvm-config(バージョン3.7)がPATHにプレーン名で表示されます。シンボリックリンクをいじったり、/ usr/binにインストールされたllvm-config-3.7を呼び出す必要はありません。

また、llvm-defaults(またはgcc-defaults)という名前のパッケージを確認します。これにより、これを行うための別の方法が提供される可能性があります(使用しませんでした)。

1
hmijail

下の行だけを使用しましたが、うまくいきました。 VMWare WorkStationkernel 4.8.10を使用してVirtualBoxUbuntu 14.04をコンパイルしたかっただけです。最初は、グラフィックスやネットワーキングなどのほとんどのものが機能していませんでした。 VMWare workstationgcc 6.2.0をリ​​クエストしたことは幸運でした。 virtualboxがダウンしたため、Genymotion Android emulatorsを開始できませんでした。必要に応じて後で結果を投稿します。

VER=4.6 ; PRIO=60
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=6 ; PRIO=50
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=4.8 ; PRIO=40
Sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
0
nyxee