2016-12-19 11 views
3

私は最近GCCの古いバージョンをビルドし、それを私のホームディレクトリ(spec。~/local/gcc-5.3.0)にインストールしました。しかし、私はこのコンパイラがCUDAプロジェクトのためだけに必要であり、システムコンパイラ(GCC 6.2.1)と一緒に作業する予定です。ですから、必要に応じて、これらの間を切り替えたり、ライブラリを変更したり、パスを適切に組み込んだりする方法を見つける必要があります。異なるGCCバージョン間の切り替え

私はupdate-alternativesがこれを行う方法の1つであると理解しますが、私にはないroot権限が必要です。 、それは調整スイッチが行われるたびにシステムとローカルのgcc

    • 各呼び出しスイッチ:

      次善の策は、以下のことを保証する.bashrcでシェル関数を記述するかもしれませんローカルのgccが選択されたときに、それは最初に/usr/local/includeまたはusr/local/libのようなシステムパスを調べる前にそれ自身でインストールされたヘッダファイルとライブラリを探します。以前のanswerでは、LD_LIBRARY_PATHの変更は十分であるはずです。なぜなら、GCCのインストールでは、独自のヘッダファイルとスタティックライブラリがどこにあるかわかっているからです(正しいかどうかわからない、CPATHなどを変更する必要があると思っていました)。

    上記を達成するための最良の方法はありますか?もしそうなら、そのような機能を実装する際にどのようなパスを設定すべきですか?

  • +0

    これに対する私の個人的なアプローチは非常に洗練されていません:私はちょうどCUDAビンdirとのマッチングを追加するシェルスクリプトを持っていますgcc binディレクトリを$ PATHにコピーします。実際には、さまざまなCUDAバージョンを保持するための複数のスクリプトがあります。 CUDAの使用をやめたり、別のバージョンに切り替える場合は、新しいシェルを開きます。 – tera

    +0

    gccの 'bin'ディレクトリだけを' PATH'に追加することに言及します。インクルードディレクトリでなければ 'LD_LIBRARY_PATH'も変更する必要はありませんか? – rahul1210

    +1

    nvccとgccの両方は、ライブラリの場所を知っているので、$ PATHを変更するだけで十分です。 – tera

    答えて

    1

    これを達成するための最善の方法はありますか?もしそうなら、 そのような機能を実装する際にどのようなパスを設定すべきですか?

    他の人が指摘したように、PATHおよびLD_LIBRARY_PATHは必須です。完全性のためにMANPATHを更新することもできます。

    .bashrcで車輪を改造するのではなく、この特定の目的のために設計された少し知られているが、非常に便利でモジュラーなEnvironment Modulesを使用することをお勧めします。あなたは次のようにそれらを使用することができます(あなたが設定を設定すると、GCC/3.1.1):

    $ module load gcc/3.1.1 
    $ which gcc 
    /usr/local/gcc/3.1.1/linux/bin/gcc 
    $ module unload gcc 
    $ which gcc 
    gcc not found 
    
    +0

    シェル環境変数を設定するためのかなり気の利いたツールのようです。今では私の目的のために実際にモジュールファイルを書く方法を理解する必要があります。ご協力いただきありがとうございます。 – rahul1210

    関連する問題