hoge diary - September 2005

September 14, 2005

[Linux] シンボリックリンクの指す先へ cd するには

cd に "-P" オプションを指定します.

ただし,man P cd によると,このオプションはシェルの実装に依存するそうです.

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 に戻します.

手順は簡単... のはず.

  1. binutils-config で binutils-2.15.92.0.2-r10 (slots でインストールされているうちの古い方) に切り替える
  2. 同様に,gcc-config でコンパイラを gcc-3.3.6 に切り替える
  3. binutils を元に戻したので,/usr/lib/libc.so の変更部分も元に戻す(AS_NEEDED 以降を削除)
  4. package.keywords, package.unmask に加えた変更を元に戻す
  5. package.use に加えた変更を元に戻す("sys-devel/gcc multislot" だけは残しておく)
  6. emerge glibc binutils gcc
  7. emerge -e world
  8. package.use の "sys-devel/gcc multislot" を消す
  9. 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 と共存しています.


Valid XHTML 1.1! Valid CSS!
© 2004-2009 ぱくちゃん.
Last modified: Tue Jan 09 03:23:07 JST 2007