1

我正在尝试使用螺栓(http://bolt.x9c.fr)来记录我的程序。我的开发环境由 Mac OS X 上的 OCaml 4.0.1、Opam 和 Core 组成。在 Real World Ocaml 之后,编译过程由 corebuild 管理。

使用 corebuild 编译,Bolt 不会产生任何日志。为了进行简单的测试,我使用了 Bolt 文档中的示例。

这是简单的测试源:

let funct n =
  LOG "funct(%d)" n LEVEL DEBUG;
  for i = 1 to n do
    print_endline "..."
  done

let () =
  LOG "application start" LEVEL TRACE;
  funct 3;
  funct 7;
  LOG "application end" LEVEL TRACE

这是配置文件(bolt.config):

logger "" {
level = trace;
filter = all;
layout = default;
mode = direct;
output = file;
name = "log";
}

要运行,必须使用配置文件的路径定义环境变量 BOLT_CONFIG:

BOLT_CONFIG=./bolt.config

编译使用:

ocamlc -c -I /Users/ivan/.opam/system/lib/bolt bolt.cma -pp 'camlp4o /Users/ivan/.opam/system/lib/bolt/bolt_pp.cmo' test.ml
ocamlc -o test.byte -I /Users/ivan/.opam/system/lib/bolt unix.cma dynlink.cma bolt.cma test.cmo

然后运行就可以了

但使用 corebuild 编译:

corebuild -pkgs Bolt -libs dynlink test.byte

测试运行但没有日志。我认为corebuild使用的编译参数中有一些东西。Real World OCaml 建议使用 corebuild 但现在我认为 Core 参数和 Bolt 在某种程度上“不兼容”或者我忘记了一些东西。

4

1 回答 1

1

我试过你的测试,它对我有用,即使是 corebuild (但是,确定 Bolt 应该写成大写吗?在 linux 中,它不被接受)。所以,我想向你保证,问题出在其他地方。

corebuild 没有什么神奇之处,它只是 ocamlbuild 的一个薄包装:

cat `which corebuild`

所以应该没有任何问题。

确保您正确指定了环境变量。您应该在每次调用时指定它,如下所示:

BOLT_CONFIG=./bolt.config corebuild -pkg bolt -libs dynlink test.byte --  

或者你可以只导出一次:

export BOLT_CONFIG=./bolt.config

PS我的配置是:

OCaml 4.01.0 installed via opam 1.1
Linux Debian Squeeze
bolt 1.4
core 111.08.00
于 2014-05-05T04:50:08.480 回答