Взаимодействие с кодом на C
В этом рецепте раскрываются детали взаимодействия с кодом на языке программирования C из OCaml.
Полезные ссылки
- Глава Interfacing C with OCaml из мануала
- How to call C functions from OCaml — наглядное руководству по написанию C stub
- Easy mistakes when writing OCaml C bindings
Конфигурирование флагов сборки
Полезные ссылки
Пример ниже взят из библиотеки crypt.
lib/config/
├── discover.ml
└── dunelib/config/dune
(executable
(name discover)
(libraries dune-configurator))lib/config/discover.ml
ocaml
module C = Configurator.V1
let () =
C.main ~name:"crypt" begin fun c ->
if C.ocaml_config_var_exn c "system" = "macosx" then
C.Flags.write_sexp "c_library_flags.sexp" []
else
C.Flags.write_sexp "c_library_flags.sexp" [ "-lcrypt" ]
endlib/dune
(library
...
(foreign_stubs ...)
(c_library_flags
(:include c_library_flags.sexp)))
(rule
(targets c_library_flags.sexp)
(action
(run ./config/discover.exe)))