由于您是这门语言的新手,我还将向您概述我是如何解决这个问题的,以便您对环境有所了解……不幸的是,这有时会很痛苦。
所以你得到的错误暗示缺少一个cma
或cmxa
(我不确定你使用的是ocamlopt还是ocamlc)
让我们从源头开始……这对我们来说都是可用的
~/.opam/archives/
或只是通过opam source lablgtk
。我们进去看到一个 META 文件,这是ocamlfind
.
在cat META
我们一直在底部看到这个相关部分之后。
package "sourceview2" (
exists_if = "lablgtksourceview2.cma,lablgtksourceview2.cmxa,lablgtksourceview2.cmxs"
description = "Bindings for gtksourceview2"
requires = "lablgtk2"
archive(byte) = "lablgtksourceview2.cma"
archive(native) = "lablgtksourceview2.cmxa"
)
好的,这意味着我们应该期望一个 lablgtksourceview2.cma 或 .cmxa 存在。我们可以做的
cd `ocamlfind query lablgtk`
然后我们可以做locate lablgtksource2.cma
或find . -name lablgtksourceview2.cma
。在我的平台 OS X 上,都不存在。在 lablgtk 网站上进行了一些调查和一般的谷歌搜索之后,这是因为相关的 gtk 代码本身不在我的机器上。
对于 OS X 上的 OCaml 人员,您需要
1) opam uninstall lablgtk
(* Make sure that your path is set up correctly for PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig *)
2) brew install gtksourceview libxml2
3) opam install lablgtk lablgtk-extras
最后一步可能会失败。它很可能是 pkg-config 路径问题,这是我的PKG_CONFIG_PATH = /opt/X11/lib/pkgconfig/:/usr/local/Cellar/libxml2/2.9.2/lib/pkgconfig/
对于我猜基于 Debian 的机器上的 OCaml 人,这应该包括 Ubuntu,尽管我不确定这是否是正确的包名称。
1) opam uninstall lablgtk
2) apt-get install liblablgtksourceview2-ocaml-dev
(* Not sure what the correct pkgconfig stuff is on linux but shouldn't matter I imagine *)
3) opam install lablgtk lablgtk-extras
您可以.cma
在此之后再次检查舞蹈并检查
pwd
/Users/Edgar/.opam/4.02.1/lib/lablgtk2
~/.o/4/l/lablgtk2 ❯❯❯ ls *.cma
lablglade.cma lablgtksourceview2.cma
lablgtk.cma lablrsvg.cma
是的,相关的cma
存在。我们还可以仔细检查:
ocamlfind list | grep gtk
lablgtk2 (version: 2.18.0)
lablgtk2-extras (version: 1.5)
lablgtk2-extras.configwin (version: 1.5)
lablgtk2.auto-init (version: n/a)
lablgtk2.glade (version: n/a)
lablgtk2.rsvg (version: n/a)
lablgtk2.sourceview2 (version: n/a)
还有相关的包,sourceview2。
现在这是您完全独立的代码:
#require "lablgtk2.sourceview2"
open GMain
open GdkKeysyms
let locale = GtkMain.Main.init ()
let main () =
let window = GWindow.window ~width:320 ~height:240
~title:"Simple lablgtk program" () in
let vbox = GPack.vbox ~packing:window#add () in
window#connect#destroy ~callback:Main.quit;
(* Sourceview *)
let _ = GSourceView2.source_view ~height:240 ~width:320 ~packing:vbox#add () in
window#show ();
Main.main ()
let () = main ()
我可以成功运行它utop <the_file.ml>
如果您更喜欢使用 ocamlc 或 ocamlopt 则删除以 #require 开头的行,因为这仅适用于 utop,然后执行以下操作:
(* I just named it stackoverflow.ml, you can also use ocamlopt instead of ocamlc *)
ocamlfind ocamlc -package lablgtk2.sourceview2 -linkpkg stackoverflow.ml -o SanityCheck
然后./SanityCheck
在 OS X 上对我有用。