我正在关注Real World OCaml书籍以学习OCaml,许多程序需要使用Jane Street Core库。当我在顶层使用这个核心库中的函数时,效果很好。在那里,我只使用以下命令打开Core库。
$ #use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;
open Core.Std;;
然后我可以在toplevel中逐行运行这个程序,像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呢?
答案 0 :(得分:1)
由于您正在关注Real World OCaml,因此您可能希望使用corebuild
来编译可执行文件,因为这是本书推荐的内容。在这种情况下,命令corebuild test.native
应该正确编译您的脚本。如果您使用Core以外的库,则需要使用-pkg
选项指定它们。
另请注意,您可以省略.ml
文件中的双分号。
答案 1 :(得分:1)
确保你有ocamlfind。此外,请确保您有合适的环境来查找包。如果您使用opam安装,请运行“eval opam config env
”。然后:
ocamlfind ocamlopt -linkpkg -thread -package core test.ml -o test