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