проблема с компиляцией программы в ocaml - PullRequest
1 голос
/ 15 сентября 2010

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

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

, содержащие модули: basics.ml basics.mli, paritygame.ml paritygame.mli, univsolve.ml univsolve.mli и solvers.ml solvers.mli .....

Ответы [ 4 ]

7 голосов
/ 15 сентября 2010

Для компиляции байт-кода используйте 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

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

библиотеки, используемые во всем коде являются: открытые основы ;; открыть Paritygame ;; открыть Univsolve ;; открытые решатели ;;

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

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

4 голосов
/ 15 сентября 2010

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

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

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

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

3 голосов
/ 15 сентября 2010

Эта тема на форумах Caml может помочь.

0 голосов
/ 15 сентября 2010

Модуль Basics на самом деле является частью Camlserv , вам необходимо сначала установить его.

...