Ответ 1
Ваша команда выполняет две функции: компилирует minml.ml
(в minml.cmo
), а затем связывает результирующий объект с minml
.
Для компиляции модуля требуются интерфейсы зависимостей. Интерфейсы содержат информацию о наборе текста, которая необходима как для проверки типов, так и для генератора кода; эта информация не повторяется в реализации (.cma
здесь). Поэтому для этапа компиляции llvm.cmi
должен быть доступен. Компилятор ищет его в include-пути, поэтому вам нужен дополнительный -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