ocaml - (Ocaml) 错误:未绑定模块 Ocamlbuild_pack.Ocamlbuild_Myocamlbuild_config
问题描述
我正在尝试编译一个 ocaml 程序(它的一部分如下所示)
open Ocamlbuild_plugin
open Command
(** helper functions )
( splitting strings using a delimeter character *)
let rec strsplit sep str accu len =
try let idx = String.rindex_from str (len - 1) sep in
strsplit sep str ((String.sub str (idx + 1) (len - 1 - idx)) :: accu) idx
with Not_found -> (String.sub str 0 len) :: accu
let strsplit sep str = strsplit sep str [] (String.length str)
(** initializing variables from the environment *)
let host = Ocamlbuild_pack.Ocamlbuild_Myocamlbuild_config.system
最后一行导致未绑定模块错误。我能做些什么?谢谢
更新1:
代码来自 github 项目https://github.com/ykazakov/cb-reasoner
我正在按照那里的说明使用“make”来编译程序..这个make文件看起来像这样
BUILDDIR ?= _build
OCAMLBUILD ?= ocamlbuild
OCAMLBUILD := $(OCAMLBUILD) -build-dir $(BUILDDIR)
.PHONY: main clean clib
main:
$(OCAMLBUILD) main/cb.native
all:
$(OCAMLBUILD) main/cb.native jni cwrap/libcb.a
cwrap:
$(OCAMLBUILD) cwrap/libcb.a
jni:
$(OCAMLBUILD) jni
clean:
$(OCAMLBUILD) -clean;\
rm -f cb.native
解决方案
我在 ocamlbuild 问题跟踪器上回答了这个问题(我关注 StackOverflow 但不太密切,抱歉)。为方便起见,引用如下:
OCamlbuild 为插件用户导出一个稳定的接口作为
Ocamlbuild_plugin
模块。使用Ocamlbuild_pack
直接访问 ocamlbuild 的内部定义,建议不要使用,因为不能保证向后兼容。在您的特定情况下,此代码使用了一个模块,该模块确实在最近的 ocamlbuild 版本中被删除(它的存在是 ocamlbuild 的构建系统集成到编译器发行版中的特定方式的产物)。我可以使用 OCaml 3.12.1、4.00.1 和 4.01.0 正确构建该软件,但不能使用任何更新版本的 OCaml 和 ocamlbuild。
使用
opam
可以很容易地安装旧的 OCaml 版本:opam install 4.01.0 eval $(opam env --switch=4.01.0) make # if in the project's directoyr
如果您有兴趣修补此软件以使其与最新的 OCaml 版本兼容,我们可以讨论如何以更健壮的方式获取相应的信息。
无论如何,我要关闭它,因为这不是 ocamlbuild 的问题,而是 cb-reasoner 的维护问题。(当然,请随时发表进一步的评论。)
推荐阅读
- python - django 迁移在运行迁移之前运行 django tables2 模块的过滤器是否正确?
- mysql - 有没有办法在 flyway docker 容器上指示完成迁移?
- assembly - 我的 TSR 程序在第二次执行时冻结
- asp.net - ASP.NET MVC - 路由适用于 /home 但不适用于 /home/index
- mysql - 如何在查询之间使用执行方法?
- javascript - 点击链接后自动关闭菜单
- sql - 在 SQL 中将某些每日时间范围的日期更改为前一天
- java - 带有 Hazelcast 实现 java.io.NotSerializableException 的错误 JCache
- java - 如何在Android中设置默认属性启用禁用
- git - Git责备忽略特定提交