Компиляция с использованием сторонних библиотек
Я использую Getopt для разбора аргументов командной строки в commands.ml. Итак, первая строка command.ml выглядит так:
open Getopt
Я не могу понять, как я скомпилировал command.ml с этим модулем. Я пробовал так много вещей, и я всегда получаю следующую ошибку:
File "commands.ml", line 1, characters 5-11:
Error: Unbound module Getopt
Я добавил #require "Getopt" в мой файл.ocamlinit.
3 ответа
Вы говорите, что используете Getopt
"так" у вас есть open Getopt
в вашем коде. Но прямой связи там нет. Более обычно (и, на мой взгляд, обычно лучше) использовать модули, не открывая их.
Использование open
контролирует только имена, доступные в содержащем модуле. Он не сообщает компилятору, где искать открытые модули.
Нет никаких Getopt
модуль в стандартной библиотеке OCaml. Стандартный модуль для разбора командных строк называется Arg
, Если вы используете внешнюю библиотеку, вам нужно использовать -I
флаг, указывающий компилятору, где его искать.
.ocamlinit
Файл управляет поведением верхнего уровня OCaml (интерпретатор read-eval-print). Это не влияет на поведение компиляторов.
Если вы используете строительный инструмент, возможно, есть более простые способы его настройки. Но вам нужно будет объяснить вашу среду сборки более тщательно.
Использование ocamlfind
с вашим предпочтительным компилятором (я использую ocamlopt ниже), например так:
ocamlfind ocamlopt -package getopt -linkpkg commands.ml -o commands
Это все равно не удастся, если у вас не установлен getopt. Getopt может быть установлен с opam:
opam install getopt
Я хотел бы предложить вам использовать Arg
вместо. Это часть стандартной библиотеки OCaml, с которой приятно работать.
Проблема в том, что есть много ответов на ваш вопрос. В зависимости от того, какую систему сборки вы выбрали, будут разные команды. И это причина, почему мы спрашиваем. Но похоже, что у вас нет предпочтений, поэтому позвольте мне дать вам несколько ответов.
С ocamlbuild
$ ocamlbuild -package getopt commands.native
С ocamlfind
$ ocamlfind ocamlopt -package getopt commands.ml -o commands.native
Для более подробного объяснения прочитайте следующее.
Личный совет: если вы не знаете, что выбрать, используйте ocamlbuild
,