【问题标题】:Can't load batteries using FindLib in Ocaml TopLevel无法在 Ocaml TopLevel 中使用 FindLib 加载电池
【发布时间】:2013-02-19 00:12:56
【问题描述】:

我成功安装了ocaml-batteries-includedfindlib

我可以毫无问题地执行“ocamlfind ocamlc -package battery -c mycode.ml”。

另外,如果我这样做 ocamlfind list,我会得到

$ ocamlfind list
batteries           (version: 2.0)
batteries.pa_comprehension (version: 2.0)
batteries.pa_comprehension.syntax (version: 2.0)
batteries.pa_llist  (version: 2.0)
batteries.pa_llist.syntax (version: 2.0)
batteries.pa_string (version: 2.0)
batteries.pa_string.syntax (version: 2.0)
batteries.syntax    (version: 2.0)
bigarray            (version: [distributed with Ocaml])
camlp4              (version: [distributed with Ocaml])
...

问题是using batteries 中的ocaml (toplevel)

我已经按照告知设置了.ocamlinit

#use "topfind";;

Toploop.use_silently
             Format.err_formatter (Filename.concat (Findlib.package_directory
             "batteries") "battop.ml");;

但是当我启动 ocaml 时,我得到了这个:

$ ocaml
        OCaml version 4.00.1

Findlib has been successfully loaded. Additional directives:
  #require "package";;      to load a package
  #list;;                   to list the available packages
  #camlp4o;;                to load camlp4 (standard syntax)
  #camlp4r;;                to load camlp4 (revised syntax)
  #predicates "p,q,...";;   to set these predicates
  Topfind.reset();;         to force that packages will be reloaded
  #thread;;                 to enable threads

Exception: Fl_package_base.No_such_package ("batteries", "").

此外,如果我在ocaml toplevel 中执行#list,我会得到

# #list;;
bigarray            (version: [distributed with Ocaml])
camlp4              (version: [distributed with Ocaml])
camlp4.exceptiontracer (version: [distributed with Ocaml])
camlp4.extend       (version: [distributed with Ocaml])
...

我看不到batteries 包裹。


有什么问题?

【问题讨论】:

    标签: functional-programming ocaml ocaml-batteries


    【解决方案1】:

    您不使用 OPAM 是否有原因? (https://github.com/OCamlPro/opam)

    安装 OPAM,切换到您最喜欢的 4.0x 编译器版本(例如 opam switch 4.00.1),然后运行:opam install batteries。我建议使用opam install utop 并使用utop 而不是香草顶层。无论哪种情况:

    将以下内容放入您的~/.ocamlinit

    #use "topfind";;
    #require "batteries";;
    open Batteries;;
    

    这就是让电池正常工作所需要的一切。

    【讨论】:

    • 您好,我已经完成了所有这些。正如我在开头指出的那样,I successfully installed ocaml-batteries-included and findlib. I can do 'ocamlfind ocamlc -package batteries -c mycode.ml 没有问题。` 我可以在文件中使用电池,但不能在顶层使用。我收到# #require "batteries";; No such package: batteries 错误。
    • 我试过opam switch 4.00.1opam install batteries,但在ocaml toplevel中还是找不到batteries
    • 您在opam switch 4.00.1 之后完成了eval `opam config env` 吗?我在全新安装上测试了我的说明,它们对我来说非常有效。
    • 好的,我刚试过opam config -evn。仍然不适用于电池。异常:Fl_package_base.No_such_package ("batteries", "")。
    猜你喜欢
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多