编译包含 "open Findlib" 的 Ocaml 文件时出现未绑定模块 Findlib 错误

Unbound module Findlib error when I was compilering a Ocaml file which contains "open Findlib"

我写了一个只包含一行代码的 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的文件时会出现错误。

您需要 link 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 在 link 运行您的程序时将该目录作为查找库的位置。

$ 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
$