Ocaml 找不到 Unix 模块

Ocaml can't find Unix module

我使用以下步骤(重新)在 OS X 上安装了 Ocaml:

> brew uninstall ocaml
> brew uninstall opam
> brew install ocaml
> brew install opam
> opam init
> eval `opam config env`
> opam switch 4.02.1
> opam install batteries core

然后我尝试编译这个程序:

open Unix
open Printf

let main () =
    match fork () with
    | 0 -> printf "child\n"
    | pid -> printf "parent\n"

let _ = main ()

我使用这个命令编译:

ocamlc -o fork fork.ml

但是我得到一个错误:

File "fork.ml", line 1:
Error: Error while linking fork.cmo:
Reference to undefined global `Unix'

事实上,我在重新安装之前遇到了这个错误;这就是为什么我首先重新安装的原因。但是问题依然存在,我不知道如何解决。

unix 库默认没有 linked,所以你需要传递一些 linking 标志,让它工作,例如,

 ocamlc unix.cma fork.ml -o fork

如果你不想知道任何关于cma的事情,你可以使用ocamlbuild,而不是ocamlc:

 ocamlbuild -lib unix fork.native

或者更一般

 ocamlbuild -pkg unix fork.native

后者(带有 pkg 选项)将是首选方式,因为它允许您指定使用 opam 安装的任何包。例如,如果您曾经尝试使用 lwt,您可以将 link 与

一起使用
 ocamlbuild -pkg lwt fork.native

对于那些在使用 OCaml 交互式顶层时遇到此错误的用户,命令行语法类似于 ocamlc 所要求的语法:

ocaml unix.cma