根据此"Error: unbound module" in OCaml
我应该可以运行这个
#use "topfind";;
#require "lwt";;
#require "cohttp-lwt-unix";;
为ocaml my_test1.ml
但是在我安装了所有库并运行它之后,我有一个错误:
$ ocaml my_test.ml
Cannot find file topfind.
Unknown directive `require'.
更新
$ ocaml my_test.ml
File "./my_test.ml", line 1:
Error: Reference to undefined global `Mutex'
UPDATE2
#use "topfind";;
#require "lwt";;
#require "cohttp-lwt-unix";;
#thread;;
open Cohttp
open Lwt
open Cohttp
open Cohttp_lwt_unix
let () =
Printf.printf ("test1")
;;
和
eval `opam config env`
ocaml test1.ml
同样的错误:
File "./test1.ml", line 1:
Error: Reference to undefined global `Mutex'
答案 0 :(得分:0)
出于某种原因,解释器正在选择单线程运行时。可能是您的安装存在一些问题,或者是ocamlfind中的错误。如果您正在使用系统OCaml安装,那么我的建议是切换到OPAM的编译器,例如,
opam switch 4.05.0
然后安装必要的软件包,例如
opam install cohttp-lwt-unix
并且不要忘记使用
激活您的开关eval `opam config env`
如果问题仍然存在,请尝试安装另一个版本的OCamlFind。如果仍有问题,请提交错误报告。您展示的代码应该可以工作(并且可以在我的机器上运行)。
答案 1 :(得分:0)
ivg
是正确的,因为解释器正在选择单线程运行时,但是你需要通过自己添加#thread
来修复你的应用程序:
#use "topfind";;
#thread;;
#require "lwt";;
#require "cohttp-lwt-unix";;
这与lwt
和ocamlfind
最近的一些变化有关。您可以在我最近开通的this bug report中找到一些指示。