我正在尝试使用ocamlbuild而不是make,但是我无法正确地将我的对象文件与外部.cma库链接起来。看起来ocamlbuild首先尝试确定依赖关系,然后忽略-L/path/to/lib.cma这样的标志。使用make时,我只是将带有-I和-L标志的所有必要目录传递给ocamlc,但这些似乎不适用于ocamlbuild -- ocamlc总是失败,因为它找不到所需的库。
发布于 2013-01-27 05:26:41
你至少有两种方法可以将你的参数传递给ocamlbuild,让它考虑到你的库:
$ ocamlbuild -cflags '-I /path/to/mylibrary‘-lflags '-I /path/to/mylibrary mylibrary.cma’myprogram.byte
将原生executable.
.cma替换为.cmxa myocamlbuild.ml文件,让ocamlbuild“知道”该库,并在_tag文件中标记需要它的文件:在myocamlbuild.ml中:
打开Ocamlbuild_plugin open命令调度begin function | After_rules -> ocaml_lib ~extern:true ~目录:“/path/to/mylibrary”"mylibrary“”|_ -> ()
在_tags中:
:use_mylibrary
myocamlbuild.ml中的ocaml_lib指令告诉工具名为"mylibrary“的库(特定的实现以.cma或.cmxa或其他-配置文件、插件)位于目录"/path/to/mylibrary”中。
项目目录中与glob pattern对应的所有文件都将与ocamlbuild对"mylibrary“的使用相关联,并使用特殊参数进行编译(因此您无需担心本机或字节目标)。例如:
:use_mylibrary
注意:如果库位于编译器已知的路径中(通常是/usr/lib/ocaml或/usr/local/lib/ocaml),则路径前缀可以安全地替换为+符号,因此/usr/lib/ocaml/mylibrary变为+mylibrary。
https://stackoverflow.com/questions/14539899
复制相似问题