我正在使用Ubuntu 18.04。我安装了OCaml 4.05(通过apt-get)以及utop和Core(通过opam)。这就是我的~/.ocamlinit
的内容:
(* Added by OPAM. *)
let () =
try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
with Not_found -> ()
;;
#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
编译使用Core的OCaml代码与corebuild可以很好地工作。但是,它不适用于普通ocamlc或ocamlopt。他们抱怨:
错误:未绑定的模块核心
我发现corebuild非常挑剔。它不喜欢同一目录中的任何现有非OCaml代码:
SANITIZE: a total of 12 files that should probably not be in your source tree
has been found. A script shell file "/home/anta40/Codes/_build/sanitize.sh"
is being created. Check this script and run it to remove unwanted files or
use other options (such as defining hygiene exceptions or using the
-no-hygiene option).
IMPORTANT: I cannot work with leftover compiled files.
ERROR: Leftover object files:
File hellod.o in . has suffix .o
File helloscheme_.o in . has suffix .o
File nqueens.o in . has suffix .o
File helloscheme.o in . has suffix .o
File HelloHS.o in . has suffix .o
File helloml.o in . has suffix .o
ERROR: Leftover OCaml compilation files:
File nqueens.cmo in . has suffix .cmo
File helloml.cmo in . has suffix .cmo
File helloml.cmi in . has suffix .cmi
File nqueens.cmi in . has suffix .cmi
File nqueens.cmx in . has suffix .cmx
File helloml.cmx in . has suffix .cmx
Exiting due to hygiene violations.
Compilation unsuccessful after building 0 targets (0 cached) in 00:00:00.
使用-no-hygiene
选项,例如corebuild sum.ml -no-hygiene
不会产生任何本机可执行文件。有什么解决方法吗?
`
答案 0 :(得分:0)
OPAM软件包管理器可以支持多个OCaml实例,其中每个实例将一个OCaml安装(primeng 6.0.0-beta.1.
,ocaml
,ocamlc
等)与已安装的软件包分组。每个实例都称为 switch 。
键入ocamlopt
以查看实例列表。在开关方面,使用软件包(apt-get)进行OCaml的安装称为 system 。
最好避免将系统安装和OPAM安装混合使用。我建议您创建一个新的开关,确保OPAM设置正确来源,然后将Core安装到新的开关中:
ocaml switch
自动构建工具假定它们控制整个构建过程,并且在发现其他编译结果时会抱怨。通常,运行建议的shell脚本并重试可以避免该问题,即使只是发现另一个脚本也是如此。您的第二个问题(opam switch 4.06.1
eval $(opam config env)
opam install core
)可能与安装问题有关。
答案 1 :(得分:0)
您的安装已过时。
我想您遵循了Real World OCaml中的说明,但是OCaml生态系统自RWO第一版以来已经发生了变化。要进行现代化安装,您应该遵循Real World OCaml https://dev.realworldocaml.org/install.html的开发版本。
要回答您的问题,corebuild是ocamlbuild的一个很好的包装。要使用corebuild从// implementation 'org.apache.poi:poi-ooxml:3.17'
构建可执行文件,您应该使用
corebuild sum.native
对于本机可执行文件或
corebuild sum.byte
用于字节码编译
否则,您可以通过ocamlfind调用ocamlopt:
ocamlfind ocamlopt -package核心sum.ml
最后,如果您打算构建更大的项目,则应该对https://jbuilder.readthedocs.io/en/latest/overview.html沙丘。