すでに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つの共通のグローバルな場所を変更したい.
@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
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
リンクが削除されます。)
これは素晴らしい説明です と、マスターおよびスレーブ(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
現在、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
すべての--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
でそれらを変更します。
あなたが個人的な目的のためにそれを達成するためのより速い(しかしまだ非常にきれいな)方法が必要な場合(たとえば、コンパイラのバージョンに関するいくつかの強い要件を持つ特定のプロジェクトを構築したい場合)、次の手順に従ってください:
echo $PATH
と入力し、非常に高い優先順位を持つpersonalディレクトリを探します(私の場合、~/.local/bin
があります)。例えば:
ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++
もちろん、これは1人のユーザーで機能しますが(システム全体のソリューションではありません)、一方で、インストール環境であまりにも多くのものを変更するのは好きではありません。
新しいclangコンパイラをインストールしようとしたときにこの問題が見つかりました。 Debian と LLVMのメンテナーが同意する 代替システムは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)という名前のパッケージを確認します。これにより、これを行うための別の方法が提供される可能性があります(使用しませんでした)。
下の行だけを使用しましたが、うまくいきました。 VMWare WorkStation
でkernel 4.8.10
を使用してVirtualBox
とUbuntu 14.04
をコンパイルしたかっただけです。最初は、グラフィックスやネットワーキングなどのほとんどのものが機能していませんでした。 VMWare workstation
がgcc 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