我正在尝试使用Ocaml csv库。我下载csv-1.2.3并在安装findlib后按照安装说明进行操作:
- 解压缩源存档并转到包的根目录
- 运行'ocaml setup.ml -configure',
- 运行'ocaml setup.ml -build',
- 运行'ocaml setup.ml -install'
醇>
现在我在META
,csv.a
,csv.cma
,csv.cmi
,csv.cmx
,csv.cmxa
,csv.mli
个文件中{ {1}}剧目。 shell命令~/opt/lib/ocaml/site-lib/csv
给出了ocamlfind list -describe
,我相信这意味着csv已正确安装。
但是当我添加
时csv A pure OCaml library to read and write CSV files. (version: 1.2.3)
在我的 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
当我在Ocaml终端中直接使用File "compute.ml", line 74, characters 13-17:
Error: Unbound value load
或Csv.load
时,我遇到了相同类型的错误。有人知道我的代码或库安装有什么问题吗?
答案 0 :(得分:1)
我的猜测是你正在使用ocamlfind
进行编译(ocamlfind ocamlc -package csv ...
),因为你有一个链接错误,而不是类型检查错误(如果你没有指定的话会是这种情况)在csv
所有的地方。在这种情况下,解决方案可能是将-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 *)