CygwinでUnixモジュールを使う
Unixモジュールはソケット関連とかプロセス制御とか,そういう関数が定義されているモジュールです.Unixという名前ですが,Windowsでも大体動きます*1.いわんやCygwinをや(完璧に動くらしいです).キタコレ
しかし,調子に乗ってCygwinでインタプリタから使おうとすると,残念な結果になります.
# #load "unix.cma" Cannot load required shared library dllunix. Reason: dynamic loading not supported on this platform.
これは,CygwinプラットフォームでUnixモジュールが必要な共有ライブラリを動的にロードできないことが問題なので*2,Unixモジュールと関連ファイルを静的にリンクしたインタプリタを使えば解決します.
残念なことにそんなCygwinユーザにとってだけ都合の良いものはデフォルトでは用意されていませんが,ocamlmktopというコマンド一発で作成できます.
$ ocamlmktop -o ocamlcyg unix.cma $ ./ocamlcyg.exe Objective Caml version 3.09.2 # Unix.getenv "WINDIR";; - : string = "C:\\WINDOWS"
ユニットテスティングフレームワークOUnitとかUnixモジュールに依存する拡張ライブラリは結構あるので,これで幸せになれるかもしれません.
あと,ついでにbigarrayモジュールもリンクしてしまいましょう.これも共有ライブラリが必要なので,悲しい思いをすることになります.
$ ocaml Objective Caml version 3.09.2 # #load "camomile.cma";; Reference to undefined global `Bigarray' # #load "bigarray.cma";; Cannot load required shared library dllbigarray. Reason: dynamic loading not supported on this platform.
ちなみにSourceForge.net: camomile - Project Web Hosting - Open Source Softwareというのはid:yoriyukiさんが開発されているUnicodeライブラリです.
$ ocamlmktop -o ocamlcyg unix.cma bigarray.cma $ ./ocamlcyg.exe -I +site-lib/camomile Objective Caml version 3.09.2 # #load "camomile.cma";; # module C = Camomile;; ...省略
で書いてから気づいたんですが,Unixモジュールの説明してあるところになんか書いてあったのでちょっとぐんにゃりしました.まあ良いけど.