(Ocaml) Ошибка: несвязанный модуль Ocamlbuild_pack.Ocamlbuild_Myocamlbuild_config - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь скомпилировать программу 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

1 Ответ

4 голосов
/ 21 марта 2019

Я ответил на этот вопрос на системе отслеживания проблем 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. (Конечно, не стесняйтесь оставлять дальнейшие комментарии.)

...