Установка чего-либо в вашей системе не делает его автоматически видимым для компилятора, это верно не только для OCaml, но и для большинства обычных систем, таких как C или C++, чтобы назвать несколько.
Это означает, что вам необходимо передать некоторые флаги в компилятор или написать Makefiles или использовать некоторые системы управления проектами.
В OCaml у нас довольно развитая инфраструктура, которая отлично сочетается с opam
. Я не хочу углубляться в объяснения, просто быстрый обзор.
ocamlfind
инструмент используется для поиска библиотек в вашей системе. Это несколько близко к pkg-config
в идее, но совсем другое по дизайну. Он обертывает инструменты компилятора, чтобы передать им параметры.
ocamlbuild
- это модный швейцарский нож, который должен иметь в арсенале каждого OCamler. Это инструмент, который знает все другие инструменты и как склеивать их вместе. Я бы сказал, что это предпочтительный способ скомпилировать ваши проекты, особенно небольшие.
oasis
находится близко к autotools
в духе, но не тот общий и написан в предпосылке, что он должен быть очень прост в использовании. И действительно, это очень легко, но все же довольно гибко и мощно.
С учетом этого обзора мы можем перейти непосредственно к вашей проблеме. Таким образом, вы установили ctypes. Теперь давайте посмотрим, как пакет ctypes
виден в вашей системе с точки зрения ocamlfind
. Проще всего было бы перечислить все пакеты, видимые ocamlfind
и найти ctypes
там:
$ ocamlfind list | grep ctypes
ctypes (version: 0.4.1)
ctypes.foreign (version: 0.4.1)
ctypes.stubs (version: 0.4.1)
ctypes.top (version: 0.4.1)
Итак, похоже, что в соответствии с ctypes зонтик там уже 4 библиотеки. Одна базовая библиотека и некоторые дополнительные библиотеки, которые предоставляют некоторые функции, которые по умолчанию не нужны.
Нет давайте попробуем использовать их с ocamlbuild
ocamlbuild -package ctypes yourprogram.native
Или без ocamlbuild
непосредственно ocamlfind
:
ocamlfind ocamlopt -package ctypes yourprogram.ml -o yourprogram.native
Как вы можете видеть, есть package
вариант, к которому вы можете передать имя пакета, найденное ocamlfind
, и оно будет автоматически отображено компилятором.
Какой инструмент построения вы используете? Не могли бы вы показать нам, как вы компилируете свой код? – PatJ