ぎょーむ日誌 2000-08-27
2000 年 08 月 27 日 (日)
- 0800 起床.
曇.
- ああ,
午前中も図書館から借りてきた本を
でれでれ読んで終わった.
もうちょっと充実した週末が送れないもんだろうか.
とはいえ,
外に出るのも暑いし.
- 昼飯食っても
非生産的状態は改善されず.
ああ,
しかし普段から非生産的なのだから
日曜日だからといって
急に生産的になれるはずもないか.
- 何を読んでるかって ?
いやはや,
このトシになって初めて
三国志の流れなるものがわかりまして,
その解説本と言いますか資料みたいなモノ,
ですね.
- 人口分布.
西暦 200 年ごろの中国って,
すでにいまの日本の関東地方
(の一部?)
ぐらいの
人口は擁していたのか.
ふーん.
日本は弥生時代.
米作はとっくに始まってるわけだね.
- ……
とかいうのは,
さっさとやらねばならぬ仕事とは
何の関係もないなあ.
- Emacs というエディター
(正確には Lisp 動作環境)
の中でうごめく Mew という
メイラーの調子悪い.
起動でコケるようになってしまった
(Emacs の中でコケる).
mew をコンパイルしなおしても変化なし.
mew から受け取ったファイルを
ネットに送り出したりする im を再構築すると
問題なく動作するようになった.
- シャワー使って,
頭と体ごしごしと洗ってみる.
少しさっぱり.
- 1600 ごろ買物に出る.
晴れ.
暑い.
第一京浜むかいのスーパー「マルエツ」.
まぬけなことに
レジでお金が足りなくなり,
いくつかの商品を棚に戻しに行く.
うーん,
かなりぼけてますねえ.
- 財布の中にはお金が
あと 700 円ぐらいしかない.
貧乏カネなし.
あ,
これではトートロジーか.
- 北大発のメイルが外に出ない,
という昨日の問題.
<鳳翔> 発のメイルは
差し戻されて来た.
どうもそれによると地環研ではなく,
北大の根本にある DNS が
おかしくなってるようだ.
- kubo@ees.hokudai.ac.jp あてに出したときに,
frontier.esto.or.jp から IP アドレスに
変換できない,
という障害.
なかなか,
終わってるじゃないか.
- ふん.
たぶん明日あたり騒ぎになるんだろう.
「出したメイルが届いていない」
ってね.
- 晩飯の準備する.
これによって
私の内部において
「でれでれ怠け→少し働き」
という
モード切り替えが生じたので,
機会を逃さずに仕事に着手してみる.
- やらなければならんのは,
plugin
(あるいは dynamic linking load)
というプログラミング技法の習得である.
Linux なヒトにとって,
これは GNU C ライブラリーの
dlopen や dlsym 関数を使いこなすことと
同義である.
- その効用についてはまたおいおい述べるとして
……
dlsym という重要な関数が
C のコードからは問題なく呼び出せるのに,
C++ のコードからはうまく呼び出せない,
という問題にぶちあたる.
dlopen のほうは問題なさそう.
- そもそも,
それ以前の問題として
悪夢のごとき
C++ のコンパイルエラーに悩まされた.
たとえば,
string ( *plugin_f )( void );
plugin_f = dlsym( handle, "function" );
こういうふうに書くと,
「ANSI C++ ではそーいう void* からの
暗黙の型変換
(2 行目)
は認めてねーんだよ.
ばーか」
と C++ コンパイラーに英語 (らしきモノ) で
罵倒されて
蹴られてしまう
(C コンパイラーなら通る).
- dlsym はたしかに void* 型なんで,
plugin_f の本来の型である
「string を返す関数へのポインター型」
に変換しなければならん.
そういうことのようだ.
さて型変換のキャストを
どう書くべきか判然としなかったので
(何しろ
これまで関数へのポインターなど使ったことないんで),
コンパイラー相手に試行錯誤を繰り返した結果
……
なんとまぁ,
こう書くのがどうやら正しい,
ようである.
ちくしょう.
呪われている.
plugin_f = ( string ( * )( void ) ) dlsym( handle, "function" );
- 藤堂守ふうにいうなら
「亡んでもよい言語というのは存在するのだ.
そして俺は,その言語に依存している」.
- さーて,
C++ 「型キチガイ」コンパイラーの偏執的点検は
パスできたんだけど,
コンパイルしたローダーを使っても
うまく関数を呼び出せない.
なーんで,
undefined symbol
なんだよう.
- 晩飯食ってひといきつく.
[食事風景]
時計回りに.ThinkPad.
メモ.麦茶.米飯.根菜
と豆腐の味噌汁.野菜炒
め.C++ 解説本.
- 飯食ってから色々と調べてみると,
plugin を C で書くとうまくロードできるのに,
C++ で書くと ``undefined symbol''
(そんな関数見つかんねーよ)
などと
ふざけた実行時エラーが発生する,
というところまでわかった.
- 呼び出し側 (ローダー)
の方は C あるいは C++ の
どちらで書かれていても
正しく関数をロードできる.
- しかしながら,
plugin (動的に呼ばれるモジュール側)
を g++ でコンパイルすると
(つまり C++ で書いていると)
正しく関数を見つけられない.
- あ,
もう 2400 か.
今日はここまで.
- 今日の食卓
- 朝 (0900):
蕎麦.
昨日から麺類ばかり食ってる.
- 昼 (1230):
スパゲッティー.
棒状麺類からの呪縛から逃れられず.
とは言え,
ソースとしてタマネギみじん切り・ピーマン・
(例の爆烈だった) 緑トウガラシイッポンを
炒めたもの.
タマネギのみじん切りが以前よりは上達したんで,
少し嬉しい.
- 晩 (2130):
昼の炒めもの残り.
根菜と豆腐の味噌汁.
中身はいつものごとく切り干しダイコン.
ニンジン.
スーパーで茨城県産のサツマイモを
安く売ってたんで今日はそれも使用.
なかなかおいしい.