如何 link OCaml object file with Core module?

How to link OCaml object file with Core module?

我有一个简单的程序,它使用 Core.Std 模块中的函数,例如:

open Core.Std
let _ = List.last [1;2;3]

我可以通过 ocamlfindocamlbuild:

编译并 link
ocamlfind ocamlc -package core -linkpkg -thread app.ml 
ocamlbuild -use-ocamlfind -pkgs core -tag thread app.native

但我不知道如何使用 "normal" OCaml 编译器编译和 link 这样的文件:

ocamlc -c -I ~/.opam/system/lib/core_kernel/ -I ~/.opam/system/lib/core/ app.ml 
ocamlc ~/.opam/system/lib/core_kernel/core_kernel.cma ~/.opam/system/lib/core/core.cma app.cmo 

上述最后一条命令出现以下错误:

File "_none_", line 1:
Error: Error on dynamically loaded library: /home/maciej/.opam/system/lib/stublibs/dllcore_kernel_stubs.so: /home/maciej/.opam/system/lib/stublibs/dllcore_kernel_stubs.so: undefined symbol: caml_ba_alloc

我做错了什么?

您可以使用 ocamlfind ocamlc -only-show … 查看 ocamlfind 构造的完整命令。您的错误指向一些缺少的 Core 传递依赖项以及旧版本的 OCaml 和 Core。