在共享服务器上安装Ocaml hump库

时间:2012-09-11 11:44:33

标签: csv shared-libraries ocaml

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

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

现在我在METAcsv.acsv.cmacsv.cmicsv.cmxcsv.cmxacsv.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时,我遇到了相同类型的错误。有人知道我的代码或库安装有什么问题吗?

1 个答案:

答案 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 *)