2

我正在尝试使用 Ocaml csv 库。我下载了csv-1.2.3并在安装 findlib 后按照安装说明进行操作:

  1. 解压缩源存档并转到包的根目录,
  2. 运行'ocaml setup.ml -configure',
  3. 运行'ocaml setup.ml -build',
  4. 运行'ocaml setup.ml -install'

现在我在目录中有META, csv.a, csv.cma, csv.cmi, csv.cmx, csv.cmxa,csv.mli文件~/opt/lib/ocaml/site-lib/csv。我认为shell 命令ocamlfind list -describe给出csv A pure OCaml library to read and write CSV files. (version: 1.2.3)的意思是 csv 已正确安装。

但是当我添加

  let data = Csv.load "foo.csv" in

在我的compute.ml模块中并尝试在更大的程序包中编译它我有编译错误:

File "_none_", line 1, characters 0-1:
Error: No implementations provided for the following modules:
         Csv referenced from compute.cmx"

如果我只是输入

let data = load "foo.csv" in

我得到:

File "compute.ml", line 74, characters 13-17:
Error: Unbound value load

当我使用Csv.loadload直接在 Ocaml 终端中时,我遇到了相同类型的错误。有人知道我的代码或库安装有什么问题吗?

4

1 回答 1

1

我的猜测是你正在使用ocamlfind编译(ocamlfind ocamlc -package csv ...),因为你有一个链接错误,而不是一个类型检查错误(如果你根本没有指定 where csvis)。在这种情况下,解决方案可能是在-linkall生成可执行文件的最终编译行中添加一个选项,要求它csv.cmx与它链接。否则,请尝试使用ocamlfind,是的,告诉我们您的编译命令是什么。

对于顶层,它非常容易使用ocamlfind。观看此顶级互动:

% ocaml
        Objective Caml version 3.12.1

# #use "topfind";;
- : unit = ()
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

- : unit = ()
# #require "csv";;
/usr/lib/ocaml/csv: added to search path
/usr/lib/ocaml/csv/csv.cma: loaded
# Csv.load;;
- : ?separator:char -> ?excel_tricks:bool -> string -> Csv.t = <fun>

要明确。我在顶层输入过一次是:

#use "topfind";;
#require "csv";;
Csv.load;; (* or anything else that uses Csv *)
于 2012-09-12T08:13:35.657 回答