2014-09-19 2 views
1

Я пытаюсь скомпилировать источник унисона, используя компилятор OCAML (версия 4.01.0) и GNU make 4.0. Исходный код взят из ссылки (http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.27.57/)Ошибки компиляции исходного кода Unison в OCAML

Я извлек tar.gz, а затем написал команду «make NATIVE = false», как указано в руководстве пользователя (http://www.seas.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html), см. Раздел «Строительство унисон с нуля».

код начинается сбор в течение нескольких секунд, но останавливается и появляются следующие ошибки:

----------

File "/cygdrive/c/unison_build/unison-2.27.57/update.ml", line 1: 
 
Error: The implementation /cygdrive/c/unison_build/unison-2.27.57/update.ml 
 
does not match the interface update.cmi: 
 
... 
 
In module NameMap: 
 
The field `split' is required but not provided 
 
In module NameMap: 
 
The field `choose' is required but not provided 
 
In module NameMap: 
 
The field `max_binding' is required but not provided 
 
In module NameMap: 
 
The field `min_binding' is required but not provided 
 
In module NameMap: 
 
The field `bindings' is required but not provided 
 
In module NameMap: 
 
The field `cardinal' is required but not provided 
 
In module NameMap: 
 
The field `partition' is required but not provided 
 
In module NameMap: 
 
The field `filter' is required but not provided 
 
In module NameMap: 
 
The field `exists' is required but not provided 
 
In module NameMap: 
 
The field `for_all' is required but not provided 
 
In module NameMap: 
 
The field `merge' is required but not provided 
 
In module NameMap: 
 
The field `singleton' is required but not provided 
 
Makefile.OCaml:339: recipe for target 'update.cmo' failed 
 
make: *** [update.cmo] Error 2

+0

Вы считали установку Linux на вашей собственной машине? Вы смогли установить Ocaml из исходного кода на вашем компьютере? –

+0

Я нашел, что make был установлен неправильно. Таким образом, OCAML теперь компилируется, но исходный файл имеет некоторые ошибки, поскольку компилятор жалуется на то, что поля не предоставляют –

+0

Примером ошибки является «В модуле NameMap: Поле« split »обязательно, но не предоставляется « –

ответ

0

Эта ошибка может возникать при компиляции update.ml используя разные версии компилятора OCaml, вы очищаете каталог _build и повторите попытку с самого начала.

+0

Я удалил папку _build, все файлы CMI и CMO. Все равно получите ту же ошибку. –

+0

можете ли вы опубликовать сообщение «...» в сообщении об ошибке, которое вы получите? – codelion

1

Вы должны скомпилировать Unison с OCaml 3.12, он не будет компилироваться с более поздними компиляторами. Nate, что Unison больше не находится в активной разработке:

Unison больше не находится в активной разработке как исследовательский проект. На данный момент нет никого, чья работа заключается в том, чтобы добавлять новые функции, исправлять ошибки или отвечать на вопросы.

Код с веб-сайта.

+1

Спасибо большое :) –

3

я получил ту же самую ошибку (с OCaml 3.12) и решить ее, исправляя файл update.mli следующим образом (4-я строка):

-module NameMap : Map.S with type key = Name.t 
+module NameMap : MyMap.S with type key = Name.t 

Обратите внимание, что это известная ошибка (bug #585453), и я получил патч из debian пакета here (файл 0005-Fix-build-with-OCaml-3.12.patch). Патч действителен, по крайней мере, для 2.27.57 и 2.32.52. В том же пакете вы также можете найти патч для Ocaml 4.

 Смежные вопросы

  • Нет связанных вопросов^_^