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が適切にインストールされていることを意味すると私は信じています。csv.cmicsv.cmxcsv.cmxacsv.mli~/opt/lib/ocaml/site-lib/csvocamlfind list -describecsv 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

私は得る:

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

Csv.loadまたはloadOcaml ターミナルで直接使用すると、同じタイプのエラーが発生します。私のコードまたはライブラリのインストールで何が問題なのか、誰かが思いつきますか?

4

1 に答える 1

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 *)
于 2012-09-12T08:13:35.657 に答える