私は CentOS6/RHEL6 を実行するコンピューティング クラスターで作業しており、これを約 100 人の他のユーザーと共有し、1 人の IT 管理者によって監視されています。
最近、C++で書き始めましたが、一部のコードはC++11に依存しています。このウェブページC++11 はgcc
バージョン 4.8.1 以降でサポートされています。
残念ながら、コンピューティング クラスターのバージョンは 4.4.7 です。
少し前に、別の理由で、gcc
クラスタのホームディレクトリの下の場所にバージョン4.8.4をインストールしようとしました。インストールは失敗し、このエラーメッセージグーグルで調べたところ、 を更新する必要があると思われたのでglibc
、ホームディレクトリに の新しいバージョンをインストールしようとしました。劇的に失敗した。
gcc
私のIT管理者は、「クラスタ上ののバージョンを変更してもおそらくうまくいかない」と結論付けました。私がさらに質問して彼女を困らせる前に(この時点で私は必要更新版いくつかのC コンパイラー)、私はこれらをクラウドソーシングしています:
(1)gcc
バージョン4.8.1以降を自分のユーザーアカウントにインストールすることは可能ですか?(前回これを試した後、根本的にひどいアイデアだと言う人もいました。)
(2)(1)の答えが「はい」の場合、インストールが成功するように今回はどのような予防措置を講じるべきでしょうか?glibc
自分のアカウントにインストールする必要がありますか?それは実行可能でしょうか?
gcc
(3) (1)の答えが「いいえ」の場合、既存のバージョンに依存するコードを中断することなく、IT管理者がシステム全体に新しいバージョンをインストールすることは可能でしょうか?
(4)上記のいずれもが実行できない場合gcc
、別のCコンパイラでは状況は変わりますか?
要約すると、可能であれば、gcc
(権限のない)人がアップグレードを行う方法を説明してくれる、(または別の C コンパイラ)の知識を持つ人を探しています。sudo
答え1
Centos 6.7 のホーム ディレクトリでソースから GCC 4.8.5 をビルドできました。私は glibc ディストリビューションを使用しているため、glibc をビルドする必要はありませんでした。
注意: 私は、ディストリビューションの GCC 4.4.x ソース パッケージのビルド依存関係とlibmpc-devel
epel リポジトリのパッケージがインストールされているシステムでこれを行っています。これらが不足している場合は、まずソースからホーム ディレクトリにビルドし、そこから使用するために何らかの方法で gcc ビルド プロセスを変更する必要があります (それが可能であれば)。
GCC の構築:
GCCソースを取得する
curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
抽出する
tar xf gcc-4.8.5.tar.bz2
GCCソースディレクトリの外にビルドディレクトリを作成し、そこに移動します
mkdir build && cd build
設定します。私は次のようにしました:
../gcc-4.8.4/configure --build=x86_64-linux-gnu --prefix=/home/rakslice/gcc_4_8 \ --enable-checking=release --enable-languages=c,c++,fortran \ --disable-multilib --program-suffix=-4.8
ビルド。コアが 4 つあるので、次のようにしました。
make -j 5
インストール
make install
これで、テスト コードをコンパイルして実行できるようになりました。
/home/rakslice/gcc_4_8/bin/g++-4.8 hello.cpp -o hello ./hello Hello, World!
答え2
具体的なご質問に関して:
(1)確かに実現可能だが、楽しくないかもしれない。
(2)いいえ、通常はシステムのglibcを使用できます。gccからはlibstdc++
、libgcc
などが必要です。
私のアプローチは、公式指示 非常に近い非公式の指示は、それがプラットフォームに非常によく適合する場合にのみ使用してください。
実際のところ、私は 4.8 に煩わされることなく、現在のリリース シリーズ (5.2 または 4.9) のいずれかに直接進むつもりです。
注: 私自身は非ルート gcc インストールを実行したことはありませんが、gnu モジュールとしてさまざまなバージョンの gcc を維持するシステムで作業しています。