ocamlocaml-core

OCaml Error: Required module `Core__Core_sys' is unavailable


I'm having trouble linking a very simple OCaml program:

open Core

Format.printf "hello world %s\n"  "foobar";;
Format.printf "argv= %s\n" (Sys.get_argv()).(0) ;;

which I compile with

ocamlfind ocamlc -thread -package core visitor.ml

The compile step always generates the error:

Error: Required module `Core__Core_sys' is unavailable

I've pinned version 4.0.9, and I can see the file:

$ ocamlfind query core
/home/ubuntu/.opam/4.09.0/lib/core

and $ ls -la /home/ubuntu/.opam/4.09.0/lib/core shows

-rw-r--r--   1 ubuntu ubuntu    17891 Dec  3 20:14 core__Core_sys.cmi
-rw-r--r--   1 ubuntu ubuntu    93777 Dec  3 20:14 core__Core_sys.cmt
-rw-r--r--   1 ubuntu ubuntu    75659 Dec  3 20:14 core__Core_sys.cmti
-rw-r--r--   1 ubuntu ubuntu    16958 Dec  3 20:14 core__Core_sys.cmx

I've tried everything I can think of, with no luck. BTW, I notice that the documentation https://ocaml.org/api/Sys.html makes no mention at all of get_argv but if I try just plain Sys.argv I get a warning:

# Sys.argv ;;
Alert deprecated: Core.Sys.argv
[since 2019-08] Use [Sys.get_argv] instead, which has the correct behavior when [caml_sys_modify_argv] is called.

So I conclude that the core OCaml documentation published at ocaml.org is more than two years out of date! How can one obtain up-to-date documentation, ideally documentation that describes these kinds of newbie errors?


Solution

  • You need to link the package by adding the -linkpkg flag:

    ocamlfind ocamlc -thread -package core -linkpkg visitor.ml