September 13, 2005
[Gentoo] gcc-3.3.6 に戻ります
gcc-4.0.1 をインストールして emerge -e world をしたはいいものの,gqview, gimp が Segmentation fault で落ちるようになってしまいました.原因はさっぱり判りません.Firefox が動いているので GTK+ 周りではなさそうです(ちなみに Qt と KDE はピンピンしてます).
原因が glibc にあったら悲惨なことになりそうなので,gcc-3.3.6 に戻します.
手順は簡単... のはず.
- binutils-config で binutils-2.15.92.0.2-r10 (slots でインストールされているうちの古い方) に切り替える
- 同様に,gcc-config でコンパイラを gcc-3.3.6 に切り替える
- binutils を元に戻したので,/usr/lib/libc.so の変更部分も元に戻す(AS_NEEDED 以降を削除)
- package.keywords, package.unmask に加えた変更を元に戻す
- package.use に加えた変更を元に戻す("sys-devel/gcc multislot" だけは残しておく)
- emerge glibc binutils gcc
- emerge -e world
- package.use の "sys-devel/gcc multislot" を消す
- emerge -C '=gcc-4.0.1'
さあ,やってみましょうか.これだから Gentoo はやめられませんよ.
ちなみに,www-client/mozilla-firefox のように,gcc-4.0.1 でコンパイルされた C++ アプリケーションは libstdc++.so.6 を使っているので,gcc-4.0.1 の削除は emerge -e world の完了後である必要があります.package.use を元に戻す際,gcc の "multislot" フラグを残したのはそのためです.
September 12, 2005
[Gentoo] ほぼ gcc-4.0.1 化完了
emerge -e world も完了し,ほぼ gcc-4.0.1 化が完了しました.いくつかのパッケージ(valgrind, kdemultimedia, kdeaddons, tightvnc, ocaml 等)のコンパイルに失敗しましたが,普段使わないパッケージなので無視しています.
旧 gcc-3.3.6 との速度比較でもやってみたいんですが,疲れたので後日に延期します.
September 10, 2005
[Gentoo] GCC 4.0 Testing Tips (2)
GCC 4.0 Testing Tips の続きです.
sys-libs/glibc-2.3.5.20050421 がインストールされましたので,手順に従って,次は sys-devel/binutils-2.16.1 のインストールです.
# vim /etc/portage/package.use ("sys-devel/binutils multislot" を追加) # emerge binutils (snip) /usr/lib/gcc/i686-pc-linux-gnu/4.0.1/../../../../i686-pc-linux-gnu/bin/ld:/usr/lib/gcc/i686-pc-linux-gnu/4.0.1/../../../libc.so: file format not recognized; treating as linker script /usr/lib/gcc/i686-pc-linux-gnu/4.0.1/../../../../i686-pc-linux-gnu/bin/ld:/usr/lib/gcc/i686-pc-linux-gnu/4.0.1/../../../libc.so:5: syntax error collect2: ld returned 1 exit status
gcc が動かなくなってしまいました.その /usr/lib/libc.so はこんな風になっています.
/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf32-i386) GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /lib/ld-linux.so.2 ) )
強調部分が以前の libc.so と比べて新しく追加されているようです.新しい binutils の拡張構文か何かでしょうか.とりあえずこの箇所を取り除いて再度 binutils-2.16.1 のコンパイルに挑戦してみます.
# emerge binutils
無事成功しました.binutils-config を使って切り替えます.
# binutils-config -l [1] i686-pc-linux-gnu-2.15.92.0.2 * [2] i686-pc-linux-gnu-2.16.1 # binutils-config 2 * Switching to i686-pc-linux-gnu-2.16.1 ... [ ok ]
binutils-2.16.1 が入ったので,/usr/lib/libc.so に加えた変更を元に戻します.
続いて gcc-4.0.1 をコンパイルします.
# vim /etc/portage/package.use ("sys-devel/gcc multislot" を追加) # emerge gcc
無事終了しました.
GCC 4.0 Testing Tips の最後に書いてある作業です.
# emerge -e system
September 9, 2005
[Gentoo] GCC 4.0 Testing Tips
sys-devel/gcc-4.0.1 をインストールしてしまってから見つけた,GCC 4.0 Testing Tips に従って作ってみます.
既に binutils-2.15.97 が入ってしまっているので,元のバージョンに戻しておきます.
# vim /etc/portage/package.keywords (">=sys-devel/binutils-2.15.97 ~x86" を削除) # emerge binutils
元に戻し終わったら,Tips の手順に従い sys-libs/glibc の作成から入ります.
# vim /etc/portage/package.use ("sys-libs/glibc nomalloccheck nptl nptlonly pic userlocales" を追加) # vim /etc/portage/package.keywords ("=sys-libs/glibc-2.3.5.20050421 -*" を追加) # emerge =glibc-2.3.5.20050421 (中略) checking for pwd... /bin/pwd checking for i686-pc-linux-gnu-gcc... (cached) i686-pc-linux-gnu-gcc checking version of i686-pc-linux-gnu-gcc... 3.3.6, bad checking for gnumake... no checking for gmake... gmake checking version of gmake... 3.80, ok checking for gnumsgfmt... no checking for gmsgfmt... gmsgfmt checking version of gmsgfmt... 0.14.4, ok checking for makeinfo... makeinfo checking version of makeinfo... 4.8, ok checking for sed... sed checking version of sed... 4.1.4, ok checking for autoconf... autoconf checking whether autoconf works... yes configure: error: *** These critical programs are missing or too old: gcc *** Check the INSTALL file for required versions.
gcc-config を用いてデフォルトのコンパイラを gcc-4.0.1 に切り替える必要があるようです.
# gcc-config -l [1] i686-pc-linux-gnu-3.3.6 * [2] i686-pc-linux-gnu-3.3.6-hardened [3] i686-pc-linux-gnu-3.3.6-hardenednopie [4] i686-pc-linux-gnu-3.3.6-hardenednopiessp [5] i686-pc-linux-gnu-3.3.6-hardenednossp [6] i686-pc-linux-gnu-4.0.1 # gcc-config 6 * Switching native-compiler to i686-pc-linux-gnu-4.0.1 ... [ ok ]
もう一度 glibc のインストールに挑戦します.
# emerge =glibc-2.3.5.20050421
configure が通ったので,コンパイル終了までしばらく待ちます.
[Gentoo] gcc-4.0.1 インストール完了?
emerge が終わりました./usr/bin/gcc-4.0.1 としてインストールされています.既にインストールされている sys-devel/gcc-3.3.6 と共存しています.