web-dev-qa-db-ja.com

rhel 6 x86_64に最新のgccをインストールする

Gccバージョン4.4.7のRHEL 6サーバーがあります。 gccのバージョンを更新したかった(現在のバージョンは4.8だと思います)。 Yum更新が機能しません。また、 CentOSでの同様の質問に対するSOの回答 が機能しません。承認された回答の方法に従って、出力は " Testing-1.1-devtools-6のリポジトリデータの取得中にエラーが発生しました。リポジトリが見つかりません。」また、CentOの方法に従う必要があるかどうかもわかりません。

RHEL 6 x86_64サーバーでgccを更新した人はいますか?

13
rivu

Red Hat Software Collections にはGCC 4.9が付属しており、そのチャネルを有効にすることを検討できます。

3
Bratchley

いくつかのバージョンで、rhel6の新しいgccバージョンをビルドしました(4.7.xから5.3.1以降)。

RedhatのJakub Jelinekのおかげで、プロセスはかなり簡単です Fedora gccビルドはkojiにあります

必要なバージョンの最新のsrc rpmを取得するだけです(例 5.3.1 )。

基本的には、rpm -qpR src.rpmを発行してビルド要件を決定し、バージョン要件を探します。

rpm -qpR gcc-5.3.1-4.fc23.src.rpm | grep -E '= [[:digit:]]'
binutils >= 2.24
doxygen >= 1.7.1
elfutils-devel >= 0.147
elfutils-libelf-devel >= 0.147
gcc-gnat >= 3.1
glibc-devel >= 2.4.90-13
gmp-devel >= 4.1.2-8
isl = 0.14
isl-devel = 0.14
libgnat >= 3.1
libmpc-devel >= 0.8.1
mpfr-devel >= 2.2.1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
systemtap-sdt-devel >= 1.3

退屈な部分が来ます-ディストリビューションのyumで提供されているバージョンよりも高いバージョンのパッケージはすべて koji からダウンロードする必要があり、すべての依存関係の要件が満たされるまでプロセスを再帰的に繰り返します。

不正行為です。
私は通常、rpmを再パッケージして、gnu機能を使用して正しいビルドツリーを含め、正しく配置され名前が付けられた要件を使用します。そのため、gmp/mpc/mpfr/isl(cloogは不要)がダウンロードされ、正しいものに変換されますパス、および新しい(肥大化した)tarは、パッケージ化された(rpm)バージョンに依存することなく、新しいsrc rpm(スペックファイルにわずかな変更を加えたもの)に再構築されます。 ADAを使用している人は誰もいないので、gnatに関連する部分をスペックファイルから削除するだけで、ビルドプロセスがさらに簡素化され、心配するbinutilsだけが残ります。
Gccは実際には古いbinutilsでビルドできるため、急いでいる場合は、スペックファイルをさらに編集して、システムにすでに存在するbinutilsバージョンを要求します。これにより、gccが若干損なわれますが、ほとんどの場合、十分に機能します。
これはほとんどの場合うまく機能します。

UPDATE 1

Src rpmを開く最も簡単な方法は、おそらくrpmをインストールして〜/ rpmbuildの下にあるすべてにアクセスすることですが、私は好みます

mkdir gcc-5.3.1-4.fc23
cd gcc-5.3.1-4.fc23
rpm2cpio ../gcc-5.3.1-4.fc23.src.rpm | cpio -id
tar xf gcc-5.3.1-20160212.tar.bz2
cd gcc-5.3.1-20160212
contrib/download_prerequisites
cd ..
tar caf gcc-5.3.1-20160212.tar.bz2 gcc-5.3.1-20160212
rm -rf gcc-5.3.1-20160212
# remove gnat
sed -i '/%global build_ada 1/ s/1/0/' gcc.spec
sed -i '/%if !%{build_ada}/,/%endif/ s/^/#/' gcc.spec
# remove gmp/mpfr/mpc dependencies
sed -i '/BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1/ s/.*//' gcc.spec
# remove isl dependency
sed -i '/BuildRequires: isl = %{isl_version}/,/Requires: isl-devel = %{isl_version}/ s/^/#/' gcc.spec
# Either build binutils as I do, or lower requirements
sed -i '/Requires: binutils/ s/2.24/2.20/' gcc.spec
# Make sure you don't break on gcc-Java
sed -i '/gcc-Java/ s/^/#/' gcc.spec

また、プレフィックスを設定して、このrpmがディストリビューションrpmを壊すことなく並べてインストールするように選択することもできます(ただし、名前の変更と内部パッケージ名の変更が必要です)。通常は環境モジュールを追加するので、rpmの一部として(コレクションの動作と同様に)必要に応じてこのgccをロードおよびアンロードできます(したがって、新しい依存関係を追加します)。

最後にrpmbuildツリーを作成し、ファイルを配置してビルドする場所に配置します。

yum install rpmdevtools rpm-build
rpmdev-setuptree
cp * ~/rpmbuild/SOURCES/
mv ~/rpmbuild/{SOURCES,SPECS}/gcc.spec
rpmbuild -ba ~/rpmbuild/SPECS/gcc.spec

更新2

通常、開発には「サーバー」OSを使用すべきではありません。そのため、最新のgccがすでに付属しているFedoraを使用しています。特定の要件がありますが、タスクに適切なツールを使用することを検討する必要があります。rhel/ centosで本番用アプリを実行し、Fedoraでこれらのアプリを開発します。

2
Dani_l

こんにちはみんな私がやったことです(ゼロからコンパイル)。別の答えに問題はないと思いますが、GCCはセキュリティにとって特に重要なので、元の公式ソースからコンパイルすることを好みます。

yum -y install gmp-devel mpfr-devel libmpc-devel glibc-devel glibc-devel.i686 Zip unzip jar
wget http://mirrors.kernel.org/gnu/gcc/gcc-5.5.0/gcc-5.5.0.tar.gz
tar -zxvf gcc-5.5.0.tar.gz
cd gcc-5.5.0
./configure
make
make install
yum remove gcc
rm -rf /usr/bin/gcc
rm -rf /usr/bin/c++
rm -rf /usr/bin/cc
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc-5.5.0 /usr/bin/gcc
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-c++ /usr/bin/c++
ln -s /usr/local/bin/x86_64-unknown-linux-gnu-gcc /usr/bin/cc

出典: http://realtechtalk.com/GCC_5_on_Centos_6_How_To_Install-1965-articles

0
Areeb Soo Yasir