私はCentOS6/RHEL6を実行しているコンピューティングクラスターで作業しており、1人のIT管理者が監督し、約100人の他のユーザーと共有しています。
最近、C++で書き始めましたが、コードの一部はC++ 11に依存しています。 このWebページ によると、C++ 11はgcc
バージョン4.8.1以降でサポートされています。
残念ながら、コンピューティングクラスターのバージョンは4.4.7です。
少し前に、別の理由で、クラスターのホームディレクトリの下の場所にgcc
バージョン4.8.4をインストールしようとしました。インストールが失敗し、 このエラーメッセージ でした。いくつかのグーグルで、glibc
を更新する必要があると思われたので、その新しいバージョンをホームディレクトリにインストールしようとしました。それ 劇的に失敗した 。
私のIT管理者は、「クラスター上のgcc
のバージョンを変更することはおそらく機能しないだろう」と結論付けました。さらに質問で彼女を悩ませる前に(この時点で私は必要更新バージョンsome Cコンパイラであるため)、私はこれらをクラウドソーシングしています:
(1)gcc
バージョン4.8.1+をユーザーアカウントにインストールすることは可能ですか? (前回これをやろうとした後、根本的にひどい考えだと言う人もいました。)
(2)(1)の答えが「はい」の場合、インストールが成功することを確認するために、今回はどのような予防措置を講じる必要がありますか?アカウントにglibc
をインストールする必要がありますか?それは実行可能ですか?
(3)(1)の答えが「いいえ」の場合、IT管理者は、既存のバージョンに依存するコードを中断することなく、システム全体に新しいバージョンのgcc
をインストールできますか?
(4)上記のいずれもgcc
で実行できない場合、別のCコンパイラで状況は変わりますか?
要約すると、私はgcc
(または別のCコンパイラ)の知識を持った人を探して、(Sudo
権限のない)人がどうなるかを説明します可能であれば、アップグレードについて。
Centos6.7のホームディレクトリにあるソースからGCC4.8.5をビルドすることができました。私はdistroglibcを使用しています。 glibcをビルドする必要はありませんでした。
警告:これは、ディストリビューションのGCC4.4.xソースパッケージのビルド依存関係とepelリポジトリのlibmpc-devel
パッケージがインストールされているシステムで行っています。それらが欠落している場合は、最初にソースからホームディレクトリにビルドし、そこから使用するように何らかの方法で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!
あなたの特定の質問に関して:
(1)はい、実現可能ですが、面白くないかもしれません。
(2)いいえ、通常はシステムglibcを使用できます。 gccからは、libstdc++
、libgcc
などが必要です。
私のアプローチは、 公式の指示非常に厳密にに従い、プラットフォームに非常によく一致する場合にのみ非公式の指示に頼ることです。 。
私は実際には4.8を気にせず、現在のリリースシリーズの1つ(5.2または4.9)に直接進みます。
注:私は自分で非ルートgccのインストールを行っていませんが、異なるバージョンのgccをgnuモジュールとして維持するシステムで作業しています。