【问题标题】:OCaml: How to Run a Script with Libraries IncludedOCaml:如何运行包含库的脚本
【发布时间】:2013-12-24 18:42:51
【问题描述】:

我正在关注 Real World OCaml 这本书来学习 OCaml,许多程序都需要使用 Jane Street Core 库。当我在顶层使用这个核心库中的函数时,效果很好。在那里,我只使用以下命令打开 Core 库。

$ #use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
open Core.Std;;

然后我可以在顶层逐行运行这个程序,并且像 String.split 这样的函数可以正常工作。

# let languages = "OCaml,Perl,C++,C";;
val languages : string = "OCaml,Perl,C++,C"
# let dashed_languages =
let language_list = String.split languages ~on:',' in
String.concat ~sep:"-" language_list
;;
val dashed_languages : string = "OCaml-Perl-C++-C"

但是如果我把它全部放在一个脚本中,我如何让编译器识别核心库呢?因此,如果我在脚本中运行相同的程序:

open Core.Std;;
open Str;;

let languages = "OCaml,Perl,C++,C";;
let dashed_languages =
    let language_list = String.split languages ~on:',' in
    String.concat ~sep:"-" language_list
;;

然后我编译它:

ocamlopt -o test test.ml

我收到一个错误:

Error: Unbound module Core

很明显,Core 没有被识别。我无法将#use 和#require 命令放在我的脚本中,因为OCaml 无法识别它们。那么我该如何使用Core呢?

【问题讨论】:

标签: ocaml


【解决方案1】:

由于您正在关注 Real World OCaml,您可能希望使用 corebuild 来编译可执行文件,因为这是本书推荐的内容。在这种情况下,命令corebuild test.native 应该正确编译您的脚本。如果您使用 Core 以外的库,则需要使用 -pkg 选项指定它们。

另外,请注意,您可以在 .ml 文件中省略双分号。

【讨论】:

    【解决方案2】:

    确保您有 ocamlfind。此外,请确保您有合适的环境让它找到包。如果您使用 opam 安装,请运行“eval opam config env”。那么:

    ocamlfind ocamlopt -linkpkg -thread -package core test.ml -o test
    

    【讨论】:

      猜你喜欢
      • 2013-12-06
      • 2014-04-07
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2022-10-19
      • 2013-01-29
      相关资源
      最近更新 更多