0

我正在尝试编译一个非常小的小插图,以查看 lablgtk2 的工作原理。

(* file: base.ml *)
let main () =
  let window = GWindow.window () in
  window#show ();
  GMain.Main.main ()

let _ = main ()

我通过 wodi32 包管理器正确安装了它,并检查了 pgk-lib 文件夹以查看是否有 gMain.cmx/cmi 和 gWindow.cmx/cmi 文件(以及相应的 .ml 和 .mli 文件)。但是,当我运行以下编译命令时:

$ ocamlc -I +lablgtk2 -o 基础 lablgtk.cma gtkInit.cmo base.ml

我收到以下错误:

文件“base.ml”,第 4 行,字符 15-29:
错误:未绑定的模块 GWindow

什么不正确?为什么找不到 GMain 和 GWindow 模块?有没有我可以使用的替代命令行编译指令来生成可执行文件(即 Windows/Linux 样式)?例如,有没有办法直接链接 GMain 和 GWindow 模块,以便编译器理解它们不是未绑定的?

奇怪的是,当我运行以下命令时,似乎一切正常,但只产生了一个目标文件(即 base.o,以及 base.cmx,base.cmi):

$ ocamlfind opt -package lablgtk2 -linkpkg base.ml

如何将该对象转换为可执行文件?

4

1 回答 1

1

如果您使用通过 ocamlfind 安装的库(现在几乎所有库都提供 ocamlfind 支持),请始终使用 ocamlfind 作为 ocaml(c|opt) 的包装器。只有 ocamlfind 可以解析这些库的“META”文件。并且 ocamlfind 可以将库安装到不同的位置(取决于您的 findlib.conf 和某些环境变量),普通的 ocaml 可能无法使用 '+lib' 符号找到它们。

以下应该有效:

ocamlfind ocamlopt -package lablgtk2.auto-init -linkpkg base.ml -o myprog.exe
ocamlfind ocamlc -package lablgtk2.auto-init -linkpkg base.ml -o myprog_byte.exe

'.auto-init' 将为您添加 gtkInit。

于 2013-04-28T19:33:54.867 回答