Как скомпилировать код ocaml в native для использования в C ++ - PullRequest
1 голос
/ 13 апреля 2020

Как мне скомпилировать эту библиотеку парсера facebook до собственного кода, чтобы она могла быть импортирована моей программой на C ++ https://github.com/facebook/flow/tree/master/src/parser

Я пытался использовать ocamlopt и dune build но, похоже, есть ошибки.

File "src/services/saved_state/dune", line 7, characters 4-29:
7 |     saved_state_dummy_fetcher
        ^^^^^^^^^^^^^^^^^^^^^^^^^
Error: Module Saved_state_dummy_fetcher is excluded but it doesn't exist.

Спасибо

1 Ответ

1 голос
/ 13 апреля 2020

OCaml - это язык, отличный от C или C ++, и он использует другие соглашения о вызовах и двоичный интерфейс (ABI), чем C или C ++. Здесь нет ничего особенного в OCaml, даже код, скомпилированный с помощью различных компиляторов C ++, в общем, не совместим и не может быть импортирован.

Итак, если вы хотите вызвать библиотечную функцию, написанную на языке A, из программы, написанной на языке B, вы должны использовать bindings . Если привязок нет, вы можете написать свой собственный, хотя это не тривиальный проект, так как вам нужно решить, как преобразовать структуры данных C в структуры данных OCaml и наоборот. Если вы или кто-то другой решите пойти по этому пути, вот несколько советов. Официальная документация описывает интерфейс низкого уровня. Высокоуровневый и менее подверженный ошибкам интерфейс обеспечивается библиотекой CTypes (которая также может генерировать код C, который впоследствии можно будет скомпилировать в файл .so).

Конечно, перед написанием заглушек вы также должны научиться компилировать потоковый проект, поскольку отображаемая ошибка не имеет ничего общего с импортом кода OCaml в C или C ++ проект. , Вы должны следовать инструкциям потока homepage .

...