尝试将文件作为脚本运行时出错

时间:2018-01-05 01:42:19

标签: ocaml

根据此"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'

2 个答案:

答案 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";;

这与lwtocamlfind最近的一些变化有关。您可以在我最近开通的this bug report中找到一些指示。