だんだんわかってきた
ocamloptで.cmxaを作るときにCライブラリを使いたい場合は-cclibを使う。Objective Caml\lib以下にlibxxxx.libを置く。
ocamlcで.cmaを作るときにCライブラリを使いたい場合は-dllibを使う。Objective Caml\lib\stublibs以下にdllxxxx.dllを置く。.dllを作っていてシンボルcaml_local_rootsが見つからない場合はCソースを/DCAML_DLL付けてコンパイルし直す。
これだけで万事OKです。-customとかocamlmktopとか要らんです。.dll作って-dllibで指定しておけば対話環境からも#loadできますし。
しかし結局VisualC++版にしたのですが、clとlinkは楽でいいな。流石Microsoftのツールチェインだけあります。むしろldやdlltoolが狂気の沙汰なだけだと改めて……。
一応camlidl用の.defファイル置いときますね。これでdllcamlidl.dllを作れば対話環境からもCOMオブジェクトが使えるようになるはず。目的はあくまでGMPですので試しもしませんけれど。
LIBRARY dllcamlidl.dll EXPORTS camlidl_com_initialize camlidl_com_uninitialize camlidl_com_queryInterface camlidl_com_combine camlidl_com_parse_uid camlidl_com_create_instance camlidl_com_register_factory camlidl_free
それにしても、google:ocamlc ocamlopt cclib dllibでマニュアルとMakefileしか出てこないといいますのに、皆さんあのマニュアルだけで何も疑問に思わずに使いこなせてるってことなんでしょうか……。流石OCamlやるような人達は私とは違う。