web-dev-qa-db-ja.com

特定のユーザーアカウントのgccをアップグレードする

私は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権限のない)人がどうなるかを説明します可能であれば、アップグレードについて。

2
dbliss

Centos6.7のホームディレクトリにあるソースからGCC4.8.5をビルドすることができました。私はdistroglibcを使用しています。 glibcをビルドする必要はありませんでした。

警告:これは、ディストリビューションのGCC4.4.xソースパッケージのビルド依存関係とepelリポジトリのlibmpc-develパッケージがインストールされているシステムで行っています。それらが欠落している場合は、最初にソースからホームディレクトリにビルドし、そこから使用するように何らかの方法でgccビルドプロセスを変更する必要があります(それが可能な場合でも)。

GCCの構築:

  1. GCCソースを取得する

    curl -LO https://mirrors.kernel.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
    
  2. エキス

    tar xf gcc-4.8.5.tar.bz2
    
  3. GCCソースディレクトリの外にビルドディレクトリを作成し、そこに移動します

     mkdir build && cd build
    
  4. 構成、設定。やった:

     ../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
    
  5. ビルドします。私は4つのコアを持っているので、次のようにしました。

     make -j 5
    
  6. インストール

     make install
    
  7. これで、いくつかのテストコードをコンパイルして実行できます。

     /home/rakslice/gcc_4_8/bin/g++-4.8     hello.cpp   -o hello
     ./hello
     Hello, World!
    
2
rakslice

あなたの特定の質問に関して:

(1)はい、実現可能ですが、面白くないかもしれません。

(2)いいえ、通常はシステムglibcを使用できます。 gccからは、libstdc++libgccなどが必要です。

私のアプローチは、 公式の指示非常に厳密にに従い、プラットフォームに非常によく一致する場合にのみ非公式の指示に頼ることです。 。

私は実際には4.8を気にせず、現在のリリースシリーズの1つ(5.2または4.9)に直接進みます。

注:私は自分で非ルートgccのインストールを行っていませんが、異なるバージョンのgccをgnuモジュールとして維持するシステムで作業しています。

0
Zulan