2005-05-05 [長年日記]
λ. GHC ソースコードハッキング 3日目
I/O周りをいじろうとするが、なかなか思うようにいかない。
どうでもいいが、Handle型の定義が GHC.Handle でなく GHC.IOBase にあるってのも何か間違ってるよな。他にも色々と暗黒面を見た気がするよ。
それと、GHCのI/O は nonblocking mode が基本なのか。
あと、例のText.Regexの鬼車(Oniguruma)パッチをちょっと変更して、Hugs98-Mar2005向けのパッチも一応作った(hugs98-Mar2005-oniguruma3-1.patch)のだけど、実際にコンパイルして実行すると、何故か鬼車ではなくlibcのregcomp/regexec/regfreeが呼ばれてしまう。そしてregex_tのサイズが違うので落ちる。
実際にregcomp/regex/regfreeを呼んでいるコードはPosix.soにあって、こいつは-lonig付きでビルドしてある。で、このPosix.soをhugs本体からdlopen("Posix.so", RTLD_LAZY | RTLD)
みたいな感じでロードして使っている。環境は普通のLinux。きっとシンボルを探す場所の順序の問題なんだろうけど、どうしたものかな……
[2005-05-07 追記] [Gauche-devel-jp] 動的リンカのシンボル解決 のスレッドに全く同じ問題が書かれていた。しかし、ダイナミックリンカのこの仕様って考えれば考えるほど使いにくい仕様だな。さすが Unix、腐ってます。それはともかく、このスレッドによると ld の -Bsymbolic オプションを使えば一応は回避出来るようだ。試してみたら上手くいった。hugs98-Mar2005-oniguruma3-2.patch