Gauche > Archives > 2012/01/22

2012/01/22 04:04:57 UTCshiro
#
Windowsで、ライブラリの初期化関数を「何度呼ばれても良いが最初の一回だけ中身が実行される」ように書くイディオムって何だろ。マルチスレッド前提。mutexやcritical sectionはランタイムにしか作成/初期化できないので「既に初期化されたかどうか」の判定をガードするのには使えないよね。関数内で閉じた形では無理で、DllMainでもって初期化しなさいって話になるのかな。
#
C++ならコンストラクタで済むから、あまり気にしないのかもな。
2012/01/22 04:42:16 UTC齊藤
#
gcc 限定なら __attribute__((constructor)) という手もありますが、イディオムってほど定着してないかなぁ。
2012/01/22 06:09:52 UTCshiro
#
ふむ。まあMinGWならgcc決め打ちで構わないって気もする。
2012/01/22 22:14:34 UTCshiro
#
MinGW版Gaucheを使ってる方、MSYSのシェルからgoshを起動して(use gauche.process) (run-process '(ps)) でpsコマンドを実行できますか? うちの環境だとクラッシュするんだけれど、どうもgosh経由でなくて「MSYSのコマンドをCreateProcess経由で起動する
#
とクラッシュするっぽいんですが、それがMSYSのせいなのかどうなのか… MSYS以外のコマンド (gosh.exeとか、notepad.exeとか) はちゃんと起動できます。Vista Home SP2。Gaucheは0.9.2バイナリリリース版。MSYSのバージョンってどこで見るんだったかな。
#
ちなみにcmd.exeからgosh起動して(run-process '(/msys/1.0/bin/ps)) だとちゃんと動く。
#
MSYSをまずアップデートするべきかな。
2012/01/22 22:37:08 UTC齊藤
#
試してみました。 その条件でクラッシュします。 (Windows7)
2012/01/22 23:58:53 UTCshiro
#
MSYSの新しいのを入れようとしたら、MinGWの新しいインストーラ(mingw-get)で入れてくれってことで、mingw-get使ったら/MinGW/msys/1.0の下に入るんだな。今までMSYSはMSYSde
#
MSYSはMSYSで/msys/1.0に独立していれてたから環境とか直さないとよくわからんことになる。