Различные способы компиляции кода ocaml с внешними библиотеками - PullRequest
0 голосов
/ 21 сентября 2011

Я установил несколько библиотек и пытаюсь скомпилировать код.

1) ocamlc -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -c mlexample2.ml хорошо генерирует mlexample2.cmi и mlexample2.cmo

2) ocamlopt -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -o mlexample2.opt генерирует хорошоmlexample2.cmx

3) Однако, если я следую за компиляцией нативного кода , эта страница : ocamlopt -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -o mlexample2.opt \ bigarray.cmxa gmp.cmxa apron.cmxa boxMPFR.cmxa polkaMPQ.cmxa mlexample2.ml возвращает File "mlexample2.ml", line 1, characters 0-1: Error: Cannot find file bigarray.cmxa, где usr/lib представляет $APRON/lib в документе,Но big.array.cmxa фактически в /usr/lib/ocaml/bigarray.cmxa.Кстати, эта команда генерирует .cmi, .cmx и .o.

Так что мои вопросы:

Как я могу перейти от .cmi и .cmo из1)?

Как я могу перейти от .cmx из 2)

Что я могу сделать с ошибкой в ​​3)

Может кто-нибудь помочь?Большое спасибо!

Edit1: 2) должно быть: ocamlopt -I /usr/lib -I /usr/local/lib/ocaml/3.11.2/apron -I /usr/local/lib/ocaml/3.11.2/gmp -c mlexample2.ml генерирует .cmi, .cmx и .o.

1 Ответ

2 голосов
/ 22 сентября 2011

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

1) В строке компиляции есть опция -c. Эта опция не связывает, поэтому она позволяет кому-то скомпилировать отдельный модуль и связать его позже. Это полезно для того, чтобы проект был собран по частям и обновлен по частям для более быстрой окончательной компиляции. Таким образом, опция -c, переданная ocamlc , создает ваш cmi и cmo модуль, соответствующий байт-коду.

2) Здесь вы что-то упустили в своей строке примера компиляции - ничего не сказано о создании дополнительного файла. Я предполагаю, что вы также используете опцию -c. Это связано с тем, что .cmx также является скомпилированным модулем, но изначально скомпилирован с помощью ocamlopt .

3) Это должно быть довольно очевидной ошибкой компиляции для исправления. Где в ваших включенных каталогах находится bigarry.cmxa? Никто из них. Вы сами сказали, что он находится в /usr/lib/ocaml/, каталоге, который вы не включили! Каталоги не выполняют рекурсивный поиск, и вы уже сталкивались с этим в других вопросах.

Я настоятельно рекомендую вам прочитать руководство по компиляции. Эта документация, которую вы изучаете, верна в том, как компилировать, но вы настроили свою среду по-другому, и различие будет разочаровывать, пока вы не поймете, что на самом деле делают эти команды.

...