Building OCaml for Windows using Mingw/MSYS - エラーと対処方法

今回ビルドしてみて、発生したエラーと対応した内容を載せておきます。

'bash' が見つからない

  • 現象

make -f Makefile.nt world 実行時に発生

'bash' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Failure:
  Error while running: find "." > 'C:/DOCUME~1/foo/LOCALS~1/Temp\ocamlbuilde48da9out'.
make: *** [ocamlbuild-partial-boot] Error 2
  • 原因

boot/myocamlbuild.boot 内に bash が固定で定義されているため

  • 対応

bash-3.1-MSYS-1.0.11-1.tar.bz2 を MSYS にインストール

gcc の引数が間違っている

  • 現象

make -f Makefile.nt opt.opt で発生

gcc: @C:/DOCUME~1/foo/LOCALS~1/Temp\camlrespa41d71: Invalid argument
Error during linking
make: *** [ocamlc.opt] Error 2
  • 原因

gcc に @ファイル名 という無効な引数を渡しているため
以下のところで、引数が 256 バイトを超える場合はコマンドラインの引数をファイルに落としている。

ocaml-3.10.2/utils/ccomp.ml

41 let quote_files lst =
42   let s =
43     String.concat " "
44       (List.map (fun f -> if f = "" then f else Filename.quote f) lst) in
45   if Sys.os_type = "Win32" && String.length s >= 256
46   then build_diversion lst
47   else s
  • 対応

@ファイル名 を作成している ocaml-3.10.2/utils/ccomp.ml を修正する。
修正内容は手順を参照。