编译包含 "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
$
我写了一个只包含一行代码的 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
$