2012-09-11 134 views
2

我正在嘗試使用Ocaml csv庫。我下載csv-1.2.3跟着安裝findlib後的安裝說明:在共享服務器上安裝Ocaml駝峯庫

  1. Uncompress the source archive and go to the root of the package,
  2. Run 'ocaml setup.ml -configure',
  3. Run 'ocaml setup.ml -build',
  4. Run 'ocaml setup.ml -install'

現在我有METAcsv.acsv.cmacsv.cmicsv.cmxcsv.cmxacsv.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已正確安裝。

,但是當我在compute.ml模塊添加

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

,並嘗試在更大的程序包我的編譯錯誤中編譯:

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 

當我在Ocaml終端中直接使用Csv.loadload時,出現相同類型的錯誤。有人會知道我的代碼或庫安裝中出現了什麼問題嗎?

+1

顯示編譯命令行 – ygrek

+0

是「製造」和Makefile是相當大的,因爲它是一個大的程序(約50個文件.ml) – user1659958

回答

1

我的猜測是你正在使用ocamlfind進行編譯(ocamlfind ocamlc -package csv ...),因爲你有一個鏈接錯誤,而不是類型檢查(如果你沒有指定csv的位置,就是這種情況)。在這種情況下,解決方案可能會將​​3210選項添加到生成可執行文件的最終編譯行中,要求它將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 *) 
+0

感謝爲:的CSV在頂層工作良好。仍然我無法編譯我的程序包,我用以下代碼修改了模塊compute.ml'let data = Csv.load「foo.csv」in'錯誤的編譯命令(即使在最後使用-linkall)也是'ocamlopt。 opt -warn-error A unix.cmxa argl.cmx lock.cmx def.cmx buff.cmx mut.cmx secure.cmx bbar.cmx ute.cmx utd.cmx base.cmx check.cmx compute.cmx mx sassyz.cmx db1link .cmx sassu.cmx -cclib -lunix -o sassy.opt -linkall'給出消息「Error:No implementation provided for the following modules:Csv referenced from compute.cmx」 – user1659958

+2

嘗試'ocamlfind ocamlopt.opt -package csv - linkall -warn-error一個unix.cmxa argl.cmx ... -o sassy.opt'。如果幸運的話,'ocamlbuild -use-ocamlfind -pkg csv sassyz.native'也可能起作用。 – gasche

+0

它看起來我的相互服務器上有一個錯誤的庫安裝:我得到了錯誤消息:findlib:[警告]接口csv.cmi發生在幾個目錄中:。,/ xxx/zzz/sss/htdocs/opt/lib/ocaml/site-lib/csv findlib:[WARNING] Interface num。cmi出現在幾個目錄中:/ xxx/zzz/sss/htdocs/opt/lib/ocaml,。 文件「_none_」,行1,字符0-1: 錯誤:未爲以下模塊提供實現: Csv引用自compute.cmx – user1659958