简体   繁体   中英

OCaml - Error: Module `Unix' is unavailable

I have been working through Harvard's CS51 class using materials available online. I'm trying to start the final project and downloaded the necessary files, but when I try to compile them I get the following error:

Error: Module `Unix' is unavailable (required by `Thread')
Command exited with code 2.
Compilation unsuccessful after building 18 targets (15 cached) in 00:00:00.

I have not made any changes to the code I downloaded yet and supposedly I should be able to compile it successfully in its current state. Any ideas why I might be getting this error?

Just add

open Unix;;

at the very start of your.ml file

Generally, you have to explicitly ask to be linked to the Unix module.

The following program:

$ cat main.ml
Unix.gethostname () |> print_endline

would need to be built like this:

$ ocamlfind opt -linkpkg -package unix -o main main.ml; echo $?
0

whereas the bare minimum would fail with a similar error as yours:

$ ocamlopt -o main main.ml; echo $?
File "main.ml", line 1:
Error: No implementations provided for the following modules:
         Unix referenced from main.cmx
2

That said, it looks like you're using Core , in which case (as well as most other cases, actually) you're probably better off with dune :

$ cat dune
(executable
   (name main)
   (libraries unix))

$ dune build main.exe

$ ./_build/default/main.exe
amam-oy

However, if you ask Dune to link you to Core , Unix is already included automatically, so the following dune file would also work for the above program:

$ cat dune
(executable
   (name main)
   (libraries core))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM