Ваша команда выполняет две вещи: она компилирует minml.ml
(в minml.cmo
), затем связывает полученный объект в minml
.
Для компиляции модуля требуется interface из зависимостей.Интерфейсы содержат информацию о типах, которая необходима как для проверки типов, так и для генератора кода;эта информация не повторяется при реализации (.cma
здесь).Таким образом, для этапа компиляции, llvm.cmi
должно быть доступно.Компилятор ищет его в пути включения, поэтому вам нужен дополнительный -I +llvm-2.7
(что сокращенно от -I /usr/lib/ocaml/llvm-2.7
).
Для этапа компоновки требуется llvm.cma
, который содержит реализацию модуля с байт-кодом.,Здесь вы можете использовать -I
или указать полный путь, чтобы сообщить ocamlc
, где найти файл.
ocamlc -g -dtypes -I +camlp4 -I +llvm-2.7 -pp camlp4oof -c minml.ml
ocamlc -g -cc g++ -I +camlp4 -I +llvm-2.7 dynlink.cma camlp4lib.cma llvm.cma llvm_bitwriter.cma minml.cmo -o minml
или если вы хотите выполнить оба этапа в одной команде:
ocamlc -g -dtypes -cc g++ -I +camlp4 -I +llvm-2.7 dynlink.cma camlp4lib.cma llvm.cma llvm_bitwriter.cma -pp camlp4oof minml.ml -o minml