今回は、GCCのバージョンをアップグレードしたい場合について記述していみます。
CentOS 5.5では、GCCのバージョンが4.1.2と、ちょっと古いので、使いたくても使えないツールも出てきています。
その場合、GCCのバージョンアップをしないといけなくなります。たとえば、yum を使って gcc44 をインストールすることもできるでしょう。
注意する必要があるのは、4.1系と4.4系を共存させるために実行名が、gcc44 で実行することになります。
そのため、gccとシェルで入力したい場合は、aliasなどを使って環境を整備しましょう。
さてここでは、gccの4.4をインストールしてみます。
ただし、yumでgcc44 をインストールすることもできますが、ここでは、自力で更新してみます。
この更新の仕方を理解できていれば、更に上位バージョンへアップグレードすることもできるようになるからです。
では、早速、やってみましょう。
- 目次
- 履歴
2011年1月25日 初版
GCCのバージョンアップ
CentOSでGCCのバージョンアップを行うには、以下の2つのライブラリも更新する必要があります。
- mpfr (The MPFR library is a C library for multiple-precision floating-point computations with correct rounding. )
- gmp (The GNU Multiple Precision Arithmetic Library)
上記のバージョンアップを行い、その上で、gccをアップデートします。
さあ、この時、どのバージョンを使うのが良いのか・・・ですが、
これは、CentOSと同じ親(RedHat)を持つ Fedora Core のバージョン管理に、そのヒントがあります。
Fedora Coreの各バージョン毎の管理については、下記のとおりです。
Fedora Core | gcc | mpfr | gmp |
---|---|---|---|
11 | 4.4.0-4 | 2.4.1-1 | 4.2.4-6 |
12 | 4.4.2-7 | 2.4.1-3 | 4.3.1-5 |
13 | 4.4.4-2 | 2.4.2-1 | 4.3.1-6 |
14 | 4.5.1-4 | 2.4.2-1 | 4.3.1-7 |
基本的には、このFedora Core の各バージョンに合わせたものを利用した方が良いでしょう。
不安定なFedora Core とはいえ、リリースしているバージョンですから、極端にこのバージョンの組み合わせを変えてしまうと、どんな影響があるか分からない・・という不安もありますからね。
今回は、最新の1歩手前で、Fedora Core 13 の組み合わせでGCCのバージョンアップを行ってみます。つまり、gcc 4.1.2 (CentOS5.5) から gcc 4.4.4 へアップグレードすることになります。
また。gmp,mpfrは、ソースコードのrpmをダウンロードし、rpmを自サーバーで再構築します。
そのため、rpmbuildの環境が必要です。
|
以降に、アップグレード手順について、簡単に解説してみます。
mpfr を更新します。
- mpfr のソースコード付きビルドrpmをダウンロードします。
$ wget http://ftp.riken.jp/Linux/fedora/releases/13/Fedora/source/SRPMS/mpfr-2.4.2-1.fc13.src.rpm
ダウンロードサイトは、http://ftp.riken.jpを使いました。今のところ、http://ftp.riken.jpには、Fedora Core 11 以降が揃っています。非常に便利なので、いつも利用させてもらっています。
※ http://ftp.riken.jp/Linux/fedora/releases/13/ ここの13がFedora Core のバージョンに相当しますから、必要なバージョンはここの数値を変更して確認されると良いでしょう。
- mpfr のソースコードを展開します。
$ rpm -ivh --nomd5 mpfr-2.4.2-1.fc13.src.rpm 警告: mpfr-2.4.2-1.fc13.src.rpm: ヘッダ V3 RSA/SHA256 signature: NOKEY, key ID e8e40fde 1:mpfr 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します ########################################### [100%] 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します
–nomd5 : このパラメータは、md5を無視するオプションです。
このオプションを指定しないと展開できないことがあります。
また、ユーザ、グループ名がパッケージに含まれている名前がないと、上記の警告がでます。
ここは、あまり気にしなくてOKです。
ソースコードの展開先は、/usr/src/redhat/SOURCES 固定ですから、/usr/src/redhat/SOURCES というディレクトリが存在しないとエラーになります。
もし、ないようなら、mkdir で /usr/src/redhat/SOURCES のディレクトリを作成しましょう。
- mpfr のrpm再構築します。
$ cd /usr/src/redhat/SPECS/ $ ls mpfr.spec $ rpmbuild -ba mpfr.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.17330 + umask 022 + cd /usr/src/redhat/BUILD + cd /usr/src/redhat/BUILD + rm -rf mpfr-2.4.2 + /usr/bin/bzip2 -dc /usr/src/redhat/SOURCES/mpfr-2.4.2.tar.bz2 + tar -xf - ... + umask 022 + cd /usr/src/redhat/BUILD + cd mpfr-2.4.2 + rm -rf /var/tmp/mpfr-2.4.2-1-root-root + exit 0 $
わかりやすくディレクトリを変更して、lsでファイル名を確認して、最後にrpmbuildでrpmの再構築をしています。
ちゃんと作成できたかチェックしておきましょう。
$ ls /usr/src/redhat/RPMS/x86_64/mpfr* /usr/src/redhat/RPMS/x86_64/mpfr-2.4.2-1.x86_64.rpm /usr/src/redhat/RPMS/x86_64/mpfr-devel-2.4.2-1.x86_64.rpm $
上記は、64bit CentOS の場合です。
32bit CentOS は、/usr/src/redhat/RPMS/i386/ というディレクトリになります。
- mpfr を最新に更新します。
既にmpfrがインストールされている場合は、一旦、削除するのが良い。
$ rpm -qa|grep mpfr mpfr-2.4.1-1 mpfr-devel-2.4.1-1 $ rpm -e mpfr mpfr-devel
最新版をインストールします。
$ rpm -Uvh /usr/src/redhat/RPMS/x86_64/mpfr-*.rpm 準備中... ########################################### [100%] 1:mpfr ########################################### [ 50%] 2:mpfr-devel ########################################### [100%]
gmp を更新します。
- gmp のソースコード付きビルドrpmをダウンロードします。
$ wget http://ftp.riken.jp/Linux/fedora/releases/13/Fedora/source/SRPMS/gmp-4.3.1-6.fc13.src.rpm
ダウンロードサイトは、http://ftp.riken.jpを使いました。今のところ、http://ftp.riken.jpには、Fedora Core 11 以降が揃っています。非常に便利なので、いつも利用させてもらっています。
※ http://ftp.riken.jp/Linux/fedora/releases/13/ ここの13がFedora Core のバージョンに相当しますから、必要なバージョンはここの数値を変更して確認されると良いでしょう。
- gmp のソースコードを展開します。
$ rpm -ivh --nomd5 gmp-4.3.1-6.fc13.src.rpm 警告: gmp-4.3.1-6.fc13.src.rpm: ヘッダ V3 RSA/SHA256 signature: NOKEY, key ID e8e40fde 1:gmp 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します ########################################### [100%] 警告: ユーザ mockbuild は存在しません - root を使用します 警告: グループ mockbuild は存在しません - root を使用します
–nomd5 : このパラメータは、md5を無視するオプションです。
このオプションを指定しないと展開できないことがあります。
また、ユーザ、グループ名がパッケージに含まれている名前がないと、上記の警告がでます。
ここは、あまり気にしなくてOKです。
ソースコードの展開先は、/usr/src/redhat/SOURCES 固定ですから、/usr/src/redhat/SOURCES というディレクトリが存在しないとエラーになります。
もし、ないようなら、mkdir で /usr/src/redhat/SOURCES のディレクトリを作成しましょう。
- gmp のrpm再構築します。
$ cd /usr/src/redhat/SPECS/ $ ls gmp.spec $ rpmbuild -ba gmp.spec 実行中(%prep): /bin/sh -e /var/tmp/rpm-tmp.14466 + umask 022 + cd /usr/src/redhat/BUILD + cd /usr/src/redhat/BUILD + rm -rf gmp-4.3.1 + /usr/bin/bzip2 -dc /usr/src/redhat/SOURCES/gmp-4.3.1.tar.bz2 + tar -xf - ... equires: gmp-devel = 4.3.1-6 伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/gmp-4.3.1-6-root-root 書き込み完了: /usr/src/redhat/SRPMS/gmp-4.3.1-6.src.rpm 書き込み完了: /usr/src/redhat/RPMS/x86_64/gmp-4.3.1-6.x86_64.rpm 書き込み完了: /usr/src/redhat/RPMS/x86_64/gmp-devel-4.3.1-6.x86_64.rpm 書き込み完了: /usr/src/redhat/RPMS/x86_64/gmp-static-4.3.1-6.x86_64.rpm 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.76684 + umask 022 + cd /usr/src/redhat/BUILD + cd gmp-4.3.1 + rm -rf /var/tmp/gmp-4.3.1-6-root-root + exit 0
わかりやすくディレクトリを変更して、lsでファイル名を確認して、最後にrpmbuildでrpmの再構築をしています。
ちゃんと作成できたかチェックしておきましょう。
$ ls /usr/src/redhat/RPMS/x86_64/gmp* /usr/src/redhat/RPMS/x86_64/gmp-4.3.1-6.x86_64.rpm /usr/src/redhat/RPMS/x86_64/gmp-devel-4.3.1-6.x86_64.rpm /usr/src/redhat/RPMS/x86_64/gmp-static-4.3.1-6.x86_64.rpm
上記は、64bit CentOS の場合です。
32bit CentOS は、/usr/src/redhat/RPMS/i386/ というディレクトリになります。
- gmp を最新に更新します。
既にgmpがインストールされている場合は、一旦、削除するのが良い。
$ rpm -qa|grep gmp gmp-4.1.4-10.el5 $ rpm -e gmp
最新版をインストールします。
$ rpm -Uvh /usr/src/redhat/RPMS/x86_64/gmp-*.rpm 準備中... ########################################### [100%] 1:gmp ########################################### [ 33%] 2:gmp-devel ########################################### [ 67%] 3:gmp-static ########################################### [100%]
gcc を更新します。
- gcc のソースコードをダウンロードします。
$ wget http://core.ring.gr.jp/pub/GNU/gcc/gcc-4.4.4/gcc-4.4.4.tar.gz
ここでは、rpmではないことに注意してください。
GNUから、gccのソースコード+make環境一式をダウンロードします。
- gcc のソースコードを展開します。
$ tar xvfz gcc-4.4.4.tar.gz
- gcc のmake環境ディレクトリを作成します。
$ cd gcc-4.4.4 $ mkdir build $ cd build
ソースコードを展開すると gcc-4.4.4 ディレクトリが作成されますから、その配下にbuildというmake用のディレクトリを作成しています。
- configure を使ってmake 環境を作成します。
$ ../configure --disable-multilib --prefix=/usr/local/gcc --enable-languages='c,c++'
configure は、ソースコードを展開したルートディレクトリにあります。
ここでは、multilib(cpuチップ対応)を無効にし、必要最小限のC,C++の環境のみを作成しようとしています。
また、出力先は、/usr/local/gccとしています。
- make を実行します。
$ make CFLAGS='-O2' CFLAGS='-m64' LIBCFLAGS='-g -O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap
CFLAGS=’-m64′ は、64bit版ということです。何も指定しない場合は、32bit版になります。
- インストールを実行します。
$ make install
これで、先に指定したディレクトリ /usr/local/gcc へ環境一式をコピーします。
ここまでで、環境的にはgccの4.4.4が作成できたことになります。
但し、以前のバージョンもそのまま共存した形になっていますから、単純にシェルから gcc –version としても以前のバージョンが表示されます。
そこで、次にBASHのプロファイルを変更して、ユーザによって利用するgccのバージョンを切り替えてみます。
gcc 4.4.4を使うように指定する。
BASHのプロファイルを変更して、ユーザによって利用するgccのバージョンを切り替えてみます。
以下の例では、ユーザ : taro が、gcc 4.4.4を利用するように指定しています。
.bash_profile は、各ユーザのホームディレクトリ直下にある( 例: ~taro/.bash_profile ) ものを編集します。
|
編集を終えたら保存してviを終了します。
今のシェルに読み込ませて確認してみます。
|
これで、gccのアップグレードができました。
ただ、このように環境をつくれれば、他のバージョンの環境をつくれますから、応用範囲が広くなりますよね。
また、最近のパッケージでは、gcc 4.4 以降が求められるケースも増えていますので、一度、試されるのも良いと思います。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :