0

我写了一个只包含一行代码的Ocaml文件:open Findlib,然后我保存文件并命名为test.ml。在Ocaml64(Ocaml for windows)环境中,我输入命令ocamlc -o test test.ml,出现错误:Error:Unbound module Findlib。但是如果我打开 ocaml 交互环境并这样做:

$ ocaml
        OCaml version 4.12.0
# #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
# open Findlib;;
# 

它可以工作,所以我确定存在 Findlib 库,我不知道为什么在编译包含open findlib.

4

1 回答 1

1

您需要将findlib库链接到您的可执行文件。该ocamlfind实用程序可以通过多种方式使用:

ocamlfind ocamlc -package findlib -o test test.ml

例如:

$ cat test.ml
open Findlib

let () = print_endline "hello"

$ ocamlfind ocamlc -package findlib -o test test.ml
$ ./test
hello
$

或者您可以使用ocamlfind查询库所在的位置:

$ ocamlfind query findlib
/home/user/.opam/system/lib/findlib

然后告诉ocamlc包含该目录作为链接程序时查找库的位置。

$ ocamlc -I /home/user/.opam/system/lib/findlib -o test test.ml
$ ./test
hello
$ ocamlc -I `ocamlfind query findlib` -o test test.ml
$ ./test
hello
$
于 2021-12-22T04:21:27.810 回答