リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2005-01-21

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2005-01-21 Fri

* ruby+webrick on rcirpcc1

インタラクティブに検索実行できる環境用に立ち上げようとしたのだけど、
ものすごくハマった…。

まず、今入っている Ruby に対して WEBrick をインストールしようとす
ると、

/home/masao/lib/ruby/webrick/utils.rb:14: [BUG] Segmentation fault
ruby 1.6.8 (2002-12-24) [ia64-linux-gnu]
アボート (coreを出力しました)

どうやら、Ruby の拡張ライブラリである etc.so がきちんと動いていな
い模様。

そこで、一から Ruby をインストールすべく ruby-1.8.2 をダウンロード
し、configure&make。しかし、mkrbconfig.rb で固まってしまう。
これは File.foreach("config.status") do ... end のループの中で固まっ
ている模様。

しょうがないので、次に CVS 版の Ruby を取ってきて、configure&make
してみるが、同様の現象で止まる。色々と検索しながら試行錯誤してみた。

1つ目の問題は、_Unwind_Context が未定義だというエラーが出てコンパ
イルが止まる。
eval.c: 関数 `rb_thread_save_context' 内:
eval.c:9957: `_Unwind_Context' が宣言されていません (この関数内で最初に利用)
eval.c:9957: (未宣言の各変数については、それが最初に現われたそれぞれの関数
eval.c:9957: に対して一度だけ報告されます。)
eval.c:9957: `unwctx' が宣言されていません (この関数内で最初に利用)
eval.c:9960: `_UNW_AR_BSP' が宣言されていません (この関数内で最初に利用)
eval.c:9961: `_UNW_AR_BSPSTORE' が宣言されていません (この関数内で最初に利用)
eval.c: 関数 `rb_thread_restore_context' 内:
eval.c:10119: `_Unwind_Context' が宣言されていません (この関数内で最初に利用)
eval.c:10119: `unwctx' が宣言されていません (この関数内で最初に利用)
eval.c:10122: `_UNW_AR_BSP' が宣言されていません (この関数内で最初に利用)
make: *** [eval.o] エラー 1
これは以下で報告があった現象と同一。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/24673
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/24674
まず、config.h を手で
#undef HAVE_UNWIND_H
と修正し、さらに、上記にある通り、{eval,gc}.c を CVSWeb のリビジョ
ン 1.183 の変更点を見て、手修正したら通った。

2つ目の問題は、mkconfig.rb が以下のように落ちる。
これは先の ruby-1.8.2 と同じ現象で、etc.so の読み込みで落ちる問題
の様子。
./lib/fileutils.rb:1000: [BUG] Segmentation fault
ruby 1.9.0 (2005-01-21) [ia64-linux]

make: *** [.rbconfig.time] アボートしました (コアダンプしました)
色々と検索してみたら、以下のメモが見つかった。
http://blog.goo.ne.jp/gleaning/e/bea7c3ad2a1da8a77c642f8806c57847
なにが悪いって最適化。

そうこれだけ。
ちゅうわけで、トップディレクトリの Makefile の CFLAGS の-O2
を -O0 にすればよい。-O1 でも駄目。とにかく最適化やらかすと
駄目になるようだ。

というわけで、env CFLAGS="-g -O0". /configure && make してみたら、
通った。