2010-09-15 11 views
1

У меня проблема с компиляцией программы, написанной в ocaml, мне кажется, что ошибка: Ошибка: Unbound module Основы, как я могу решить эту проблему? Я заявляю, что новичок с этим языком.проблема с компиляцией программы в ocaml

библиотеки, используемые во всем коде: open Основы ;; открыть Paritygame ;; open Univsolve ;; open Solvers ;;

файлы, содержащие модули являются: basics.ml basics.mli, paritygame.ml paritygame.mli, univsolve.ml univsolve.mli и solvers.ml solvers.mli .....

ответ

7

Чтобы скомпилировать байтовый код, используйте ocamlc, за которым следуют любые другие файлы, требуемые по порядку слева направо, представляющие их зависимости. Эти файлы могут быть файлами исходного кода ocaml или скомпилированными файлами (cmo). Для компиляции файлов индивидуально cmo, вы должны сделать что-то вроде,

ocamlc.opt -c -annot -o util.cmo util.ml 
ocamlc.opt unix.cmo str.cmo util.cmo game.ml -o game 

Рекомендуется, чтобы включить строку вы использовали, чтобы попытаться скомпилировать приложение в вашем ответе, это должно быть просто здравый смысл.

libraries used throughout the code are: open Basics ;; open Paritygame ;; open Univsolve;; open Solvers;;

files containing the modules are: basics.ml basics.mli, paritygame.ml paritygame.mli,univsolve.ml univsolve.mli and solvers.ml solvers.mli.....

Эти библиотеки не называются. Это модули. Библиотека представляет собой коллекцию файлов cmo, скомпилированных в cma для распространения. Но все это, действительно, ничего не говорит о зависимостях между модулями, чтобы сказать нам, что вы делаете неправильно в компиляции. Я предлагаю, как только вы устраните некоторые из этих оснований, что вы переходите на ocamlbuild. Для простых проектов, подобных этому, он может скомпилировать проект буквально без усилий. Он будет разрешать зависимости и компилировать только файлы, которые были изменены с момента последнего вызова.

0

Модуль Основы фактически является частью Camlserv, вам необходимо установить его первым.

4

Скорее всего вы связываете модули не по порядку. Если вы используете ocamlc или ocamlopt связать, положить basics.cmo/cmx первый:

ocamlc -o my_exec basics.cmo univsolv.cmo paritygame.cmo solvers.cmo 

(. Порядок выше, не может быть правильным - например, partiygame.cmo может зависеть от solver.cmo в этом случае вы должны переключить заказ)

Или просто используйте ocamlbuild, так как он заботится обо всем этом.

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