ocamlfindがcompiler-libsを認識して名前が被るモジュールがコンパイルできない
ocaml 4.02.3において、以下のコマンドでlongident.mlというファイルを
コンパイルする際に下で示すエラーが表示されました。
longident.mlの中身はtype t = intのみで、他にファイルがないディレクトリでコンパイルしました。
longident.mlはコンパイラのコードでparsing/longident.mlが存在するため
ocamlcommon.cmxaに含まれているからエラーになっていると思うのですが
なぜcompiler-libsが以下のコンパイルコマンドでocamlfindにより認識されているのでしょうか?
ちなみに-packageからbatteries、sexplibのどちらかを外した時にも同様のエラーが発生しました。
-packageを書かないでocamlfind optでコンパイルした時には通常通りコンパイルできました。
.opam/package/からbatteriesとsexplibの依存関係とその依存パッケージの依存関係を見てもcompiler-libsにdependしているという記述は見つけられませんでした。
ocamlfind opt -package batteries,sexplib.syntax -linkpkg -syntax camlp4o ./longident.ml
findlib: [WARNING] Interface longident.cmi occurs in several directories: ., /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs
findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs, /home/tokuda/.opam/4.02.3/lib/ocaml
File "./longident.ml", line 1:
Error: Files ./longident.cmx
and /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs/ocamlcommon.cmxa
both define a module named Longident
-verboseをつけた時の表示は以下のとおりです。
ocamlfind opt -package batteries,sexplib.syntax -linkpkg -syntax camlp4o -verbose ./longident.ml
findlib: [WARNING] Interface longident.cmi occurs in several directories: ., /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs
findlib: [WARNING] Interface topdirs.cmi occurs in several directories: /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs, /home/tokuda/.opam/4.02.3/lib/ocaml
Effective set of preprocessor predicates: preprocessor,syntax,camlp4o
Effective set of compiler predicates: pkg_unix,pkg_num.core,pkg_num,pkg_bigarray,pkg_str,pkg_bytes,pkg_batteries,pkg_camlp4,pkg_compiler-libs,pkg_compiler-libs.common,pkg_type_conv,pkg_sexplib,pkg_sexplib.syntax,syntax,autolink,native
+ ocamlopt.opt -verbose -I /home/tokuda/.opam/4.02.3/lib/num -I /home/tokuda/.opam/4.02.3/lib/bytes -I /home/tokuda/.opam/4.02.3/lib/batteries -I /home/tokuda/.opam/4.02.3/lib/ocaml/camlp4 -I /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs -I /home/tokuda/.opam/4.02.3/lib/type_conv -I /home/tokuda/.opam/4.02.3/lib/sexplib -pp "camlp4 '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml/camlp4' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs' '-I' '/home/tokuda/.opam/4.02.3/lib/type_conv' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml' '-I' '/home/tokuda/.opam/4.02.3/lib/sexplib' '-I' '/home/tokuda/.opam/4.02.3/lib/sexplib' '-parser' 'o' '-parser' 'op' '-printer' 'p' 'ocamlcommon.cma' 'pa_type_conv.cma' 'unix.cma' 'bigarray.cma' 'sexplib.cma' 'pa_sexp_conv.cma' " /home/tokuda/.opam/4.02.3/lib/ocaml/unix.cmxa /home/tokuda/.opam/4.02.3/lib/ocaml/nums.cmxa /home/tokuda/.opam/4.02.3/lib/ocaml/bigarray.cmxa /home/tokuda/.opam/4.02.3/lib/ocaml/str.cmxa /home/tokuda/.opam/4.02.3/lib/batteries/batteries.cmxa /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs/ocamlcommon.cmxa /home/tokuda/.opam/4.02.3/lib/sexplib/sexplib.cmxa ./longident.ml
+ camlp4 '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml/camlp4' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs' '-I' '/home/tokuda/.opam/4.02.3/lib/type_conv' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml' '-I' '/home/tokuda/.opam/4.02.3/lib/ocaml' '-I' '/home/tokuda/.opam/4.02.3/lib/sexplib' '-I' '/home/tokuda/.opam/4.02.3/lib/sexplib' '-parser' 'o' '-parser' 'op' '-printer' 'p' 'ocamlcommon.cma' 'pa_type_conv.cma' 'unix.cma' 'bigarray.cma' 'sexplib.cma' 'pa_sexp_conv.cma' './longident.ml' > /tmp/ocamlpp0f6ab1
+ as -o './longident.o' '/tmp/camlasmc75b90.s'
File "./longident.ml", line 1:
Error: Files ./longident.cmx
and /home/tokuda/.opam/4.02.3/lib/ocaml/compiler-libs/ocamlcommon.cmxa
both define a module named Longident
ocamlopt.opt returned with exit code 2