我对Ocaml很陌生。我曾尝试从头开始在两台不同的计算机(都是Linux Mint)上安装它,并且两次都遇到了此问题。
当我安装带有opam的软件包时(特别是Base,但Core也会发生),ocaml找不到它。
$ opam install Base
[NOTE] Package base is already installed (current version is v0.11.1).
$ ocaml -open Base
OCaml version 4.05.0
File "command line", line 1:
Error: Unbound module Base
ocaml似乎位于/ usr / lib / ocaml中,其二进制文件位于/ usr / bin /中,而opam似乎将所有内容都放入〜/ .opam / packages中。
如何获取ocaml以查看与opam一起安装的软件包?我发现许多涉及未绑定模块的问答错误,但似乎都没有为我解决的问题,或者它们似乎已过时。另外,我知道我的软件包管理器Ocaml尚未完全更新,但是我也从源代码安装了4.10.0,仍然存在问题。
$ opam install dune
然后我执行]
$ eval $(opam config env)
为了在我的终端机中设置opam。 (尽管我对所有opam安装都说“是”,但我似乎每次打开终端时都需要运行此程序,因此我可能会将其添加到〜/ .profile中。)
文件myproject / helloworld.ml(请注意不需要“ Open Base”)
Base.Printf.ifprintf "Hello, World\n"
文件myproject / dune
(executable
(name helloworld)
(libraries base))
然后我跑了
$ dune build helloworld.exe
为了完成答案,如果需要将已安装的程序包加载到OCaml交互式顶层(又名REPL
,又名ocaml
实用程序(或utop
)),则可以在启动后发出以下命令ocaml
1
#use "topfind";; #require "base";;
然后您可以执行open Base
(这只会打开名称空间)并使用base
库提供的其他模块。topfind
工具可能未安装在新的opam交换机上,所以请确保它在那儿]]
opam install ocamlfind
[另外,要快速构建一个简单的应用程序,而不是使用沙丘,您可以使用ocamlbuild,例如,假设主二进制代码位于文件
example.ml
中,并且您想使用base
库,ocamlbuild -package base example.native
)此处的
1#
字符是输入的一部分,而不是提示,即,您必须输入它,因此它看起来像]]
# #use "topfind";;