无法使用带有 jbuilder 的 lablgtk2 构建程序

Unable to build a program using lablgtk2 with jbuilder

我想在使用 lablgtk2 编译时使用 jbuilder,但我在获取这些错误消息时遇到了问题:

File "_none_", line 1:
Error: No implementations provided for the following modules:
         Thread referenced from /Users/hadilsabbagh/.opam/4.05.0/lib/lablgtk2/gtkThread.cmx
         Mutex referenced from /Users/hadilsabbagh/.opam/4.05.0/lib/lablgtk2/gtkThread.cmx
         Condition referenced from /Users/hadilsabbagh/.opam/4.05.0/lib/lablgtk2/gtkThread.cmx

这是我的jbuild

(jbuild_version 1)

(executable
  ((name simple)
  (libraries (lablgtk2))
  ))

很可能,您的 jbuild 缺少对 core 的依赖(由于 gtkThread.cmx),它应该与以下 jbuild 文件一起使用:

(jbuild_version 1)

(executable
  ((name simple)
  (libraries (core lablgtk2))
  ))

这是由于 this issue。 jbuilder/dune 自动添加 mt 谓词,这意味着如果您的库提供线程选项,它将被使用,并且您需要添加 threads 作为依赖项:

(jbuild_version 1)

(executable
  ((name simple)
  (libraries (threads lablgtk2))
  ))

注意 ocaml 中库的顺序很重要,threads 需要在 lablgtk2 之前。